最大公约数(GCD)
手写 gcd 函数,常用欧几里得算法。 辗转相除法求 gcd: gcd(a, b) = gcd(b, a mod b)
这是最常用的方法,极为高效。 设 a > b,辗转相除法的计算复杂度为O((log2a)3)。
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){ return b? gcd(b, a%b):a; }
// 或者使用如下编码方式:
int GCD(int a,int b)
{
if(b==0)
return a;
return GCD(b,a%b);
}
最小公倍数(LCM)
lcm(a,b) = a∗b / gcd(a,b) = a/gcd(a,b) ∗b
int lcm(int a, int b){
//需要的时候把int改成long long
return a / gcd(a, b) * b;
//先做除法再做乘法,防止先做乘法溢出
}