最大公约数的计算

匿名 (未验证) 提交于 2019-12-03 00:12:02

定义:

/*  * 利用枚举法求出两个数的最大公约数  * 思想:先找出两个数的最小值,因为两数的最大公约数一定要比两数的最小值还要小,所以先求出两数的最小值  * 在和两个数同时取余,若和两个数同时取余都为0,那么在当前阶段它就是最大公约数,直到for循环结束,即是两个数的最大公约数  */ #include <stdio.h> int main() {     int a,b;     int min;     scanf("%d %d",&a,&b);     if(a<b)     {         min=a;     }     else     {         min=b;     }     int gcd = 0;     int i;     for(i = 1;i < min; i++)     {         if(a % i == 0&& b % i == 0)             gcd = i;     }     printf("%d 和 %d 的最大公约数是 %d\n",a,b,gcd); }      /*  * 利用辗转相除法求最大公约数  * 举例:  * a    b   t(a%b)  * 12   18  12  * 18   12  6  * 12   6   0  * 6    0  * 如上述所示当b为0时,计算结束,a就是最大公约数  * 否则,计算a%b,让a = b,b = a%b  * 回到第一步  */ #include <stdio.h> int main() {     int a,b;     int t;     scanf("%d %d",&a,&b);     while (b != 0)     {         t = a % b;         a = b;         b = t;     }     printf("gcd = %d\n",a); }

C++:

/*  * 利用algorithm算法库直接算出  */ #include <iostream> #include <algorithm> using namespace std; int main() {     int a,b;     cin>>a>>b;     cout<<a<<" 和 "<<b<<" 的最大公约数为 "<<__gcd(a,b); }    /*  * 利用递归法计算a,b的最大公约数  * 思想:先判断a%b是否为0,如果为零那么执行gcd,否则直接返回b  */ #include <iostream> using namespace std; int gcd(int a,int b) {     return a%b?gcd(b,a%b):b; } int main() {     int a,b;     cin>>a>>b;     cout<<a<<" 和 "<<b<<" 的最大公约数为 "<<gcd(a,b); }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!