最小公倍数和最大公约数求法

最小公倍数和最大公约数求法

1.最大公约数一般欧几里得算法(辗转相除法)

辗转相除法就是拿大的不断去模小的然后当小的为0是大的那个就是最大公约数

--
a=18 b=12
a=12 b=6
a=6 b=0

先用a去%12的到6此a=12,b=6,再用12%6此时b=0,a=12,就的到了结果

#include<iostream>
#include<algorithm>
using namespace std;
int gcd(int x,int y){
   return y? gcd(y,x%y):x;
}
int main(){
   int a,b;
   cin>>a>>b;
   cout<<gcd(a,b);//也可以用stl自带的函数 __gcd(a,b)
   return 0;
}

2.最小公倍数

存在一个数学定理

$$
a*b=lcm(a,b)*gcd(a,b)
$$

那很明显

$$
lcm(a,b)=a*b/gcd(a,b)
$$

那求法应该很简单了。

int lcm(a,b){
return a*b/__gcd(a,b)
}
 

 

posted @ 2022-07-26 16:27  silky__player  阅读(371)  评论(0)    收藏  举报