最大公约数|最小公倍数

辗转相除法(欧几里得算法)

img
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

posted @ 2026-09-13 12:20  叶臧  阅读(9)  评论(0)    收藏  举报