最大公约数gcd与最小公倍数lcm
最大公约数:gcd
最大公倍数:lcm
gcd和lcm的性质:(我觉得主要是第三点性质)
若gcd (𝑛,𝑥) = 1,那么gcd (𝑛,𝑛 − 𝑥)一定等于1
欧几里得算法(辗转相除法):
证明原理:
代码:
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a%b);
}
递归复杂度:
algorithm 库函数里内置好了最大公约数模板
加一个头文件#include
直接调用___gcd(a,b),返回值就是a和b的最大公约数
__gcd(a,b)
最后放上模板,求gcd和lcm:
#include <iostream>
#include <algorithm>
using namespace std;
/*algorithm 库函数里内置好了最大公约数模板
加一个头文件#include<algorithm>直接调用___gcd(a,b),返回值就是a和b的最大公约数*/
int gcd(int a,int b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
int lcm(int a,int b){
return a*b/gcd(a,b);
}
int main() {
int n,m;
cin>>n>>m;
/*最大公约数2种*/
cout<<gcd(n,m)<<endl;
cout<<__gcd(n,m)<<endl;
/*最小公倍数2种*/
cout<<lcm(n,m)<<endl;
cout<<n*m/__gcd(n,m)<<endl;
return 0;
}