辗转相除法, 又名欧几里得算法。
这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。
/*
辗转相除法
1 如果b等于0 结束运算 a就是最大公约数
2 否则计算a除以b的余数 让a等于b b等于所求的余数
3 回到第一步
*/
#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("最大公约数是%d",a);
return 0;
}
/*
枚举法
1. 设最大公约数ret为1
2.如果a和b都能被i整除 记录下i并令ret = i
3. i++后重复第2步 直到i等于a或b
4. ret即为最大公约数
*/
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int i;
int ret = 1; //记录最大公约数
for( i = 1; i <= a && i <= b; i++){
if(a % i == 0 && b % i == 0){
ret = i;
}
}
printf("%d和%d的最大公约数是%d",a,b,ret);
return 0;
}