-
题目描述:
-
输入两个正整数,求其最大公约数。
-
输入:
-
测试数据有多组,每组输入两个正整数。
-
输出:
-
对于每组输入,请输出其最大公约数。
-
样例输入:
-
49 14
-
样例输出:
-
7
代码:
#include <stdio.h>
int main() {
int m,n;
while(scanf("%d %d",&m,&n)!=EOF) {
while(m!=0 && n!=0) {
int tmp = m;
m = n;
n = tmp % n;
}
if(m==0 && n==0)
break;
else if(m!=0 && n==0)
printf("%d\n",m);
else
printf("%d\n",n);
}
return 0;
}
求a,b的最大公约数,就是求同时满足a%c==0,b%c==0的最大整数c。
1.若a,b全为0,则他们的最大公约数不存在
2.若a,b中有一个为0,则最大公约数是a,b中非0的那个
3.若a,b都不为0,则使新a=b,新b=a%b。然后重复该过程。
此即欧几里德算法。
a,b的最大公约数同时也是b,a%b的最大公约数。
我们可以不断重复该过程,直到问题缩小到求某个非零数与0的最大公约数。这样该非0数就是所求的最大公约数。