最大公约数|最小公倍数
辗转相除法(欧几里得算法)

lcm=(a+b)/gcd(a,b)
b=0的时候,a就是最小公倍数
拓展:
三个数的最小公倍数
a,b,c
lcm(lcm(a,b),c)
递归写法
int gcd(int a,int b){
if(!b)
return a;
return gcd(a,b);
}
int lcm(int a,int b){
return (a*b)/gcd(a,b);
}
非递归写法
int gcd(int a,int b){
while(!b){
int r=a%b;
a=b;
b=r;
}
return a;
}
int lcm(int a,int b){
return (a*b)/gcd(a,b);
}
模拟一下
a较小的那个数,所以a=b,b两数的余数
a=3 b=18
r=3
a=18
b=3
这里就变成a>b了
r=2
a=3
b=2
r=1
a=2
b=1
r=0
a=1
b=0
return 1
浙公网安备 33010602011771号