方法一:欧几里德算法(又叫辗转相除法)求数间最大公约数
辗转相除法:例如: 6 9 我们知道它俩的最大公约数是 3 看算式: 6/9 =0 余 6 9/6=1 余 3 6/3=2 余 0 ,当余数为0的时候,我们就可以说 除数3就是那俩数的最大公约数。
这里的辗转相除法是 求 a、b的余数,当余数不是0的时候 把除数作为下一次求余的被除数,余数作为下次求余的除数
通常有: 最大公约数*最小公倍数 = a*b (即这二个数的乘积)
#include<stdio.h>
int main(){
int a, b, s, y;
scanf("%d %d", &a, &b);
s = a * b; //输入2个数的乘积
//如果不等于0,就用辗转相除法循环,反之除数就是最大公约数
while (a % b != 0) {
y = a % b; //记录每次的模
a = b;
b = y;
}
printf("最大公约数为:%d\n最小公倍数为:%d", b, s / b);
return 0;
}
方法二:递归法
#include<stdio.h>
int main(){
int x, y;
int gcd(int a, int b); //声明函数
scanf("%d%d",&x,&y);
int result = gcd(x, y);
printf("最大公约数为:%d",result);
return 0;
}
使用递归求最大公因数
int gcd(int a, int b) {
//如果一个数等于0,另一个数就是最大公约数
if (b == 0) {
return a;
}
return gcd(b,a%b);
}