求最大公约数:
辗转相除法即欧几里得算法:
int gcd(int x,int y){
int t=1;
while(t!=0){
t = x%y;
x = y;
y = t;
}
return x;
}
求最大公约数的递归写法:
int gcd(int a, int b) {
if(b == 0) return a;
else return gcd(b,a % b);
}
更简洁的写法:
int gcd(int a, int b) {
return !b ? a : gcd(b,a % b);
}
求最小公倍数:
公式法:假设t1为a,b的最大公约数,t2为a,b的最小公倍数,则有a * b = t1 * t2,所以t2 = (ab)/t1,如果ab太大也可以写成t2 = a / t1 * b;
int lcm(int a,int b,int s){
int num;
num = gcd(a,b);
s = a/num * b;
return s;
}
本文介绍了一种高效求解两个整数最大公约数(GCD)的方法——辗转相除法(欧几里得算法),并提供了递归及非递归实现方式。此外,还介绍了如何通过GCD来计算最小公倍数(LCM),并给出了具体的计算公式与代码实现。
1920

被折叠的 条评论
为什么被折叠?



