gcd
正常做法
int gcd(int a,int b) {
int r;
while(b > 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
三目运算
int gcd(int a,int b) {
return b > 0 ? gcd(b, a % b) : a ;
}
库函数
int gcd(int a,int b) {
return __gcd(a, b);
}
位运算
int gcd(int a,int b) {
while(b^=a^=b^=a%=b);
return a;
}
//a, b 不为 0;
素因子分解
素因子分解:n = p1 ^ e1 * p2 ^ e2 *…*pn ^ en
现在取n的两个因子a,b
a=p1 ^ a1 * p2 ^ a2 *…*pn ^ an
b=p1 ^ b1 * p2 ^ b2 *…*pn ^ bn
gcd(a,b)=p1 ^ min(a1,b1) * p2 ^ min(a2,b2) *…*pn ^ min(an,bn)
lcm
公式
设有两个数a, b, 他们的最大公约数是p,最小公倍数是q。
则a * b = p * q;
素因子分解
素因子分解:n = p1 ^ e1 * p2 ^ e2 *…*pn ^ en
现在取n的两个因子a,b
a=p1 ^ a1 * p2 ^ a2 *…*pn ^ an
b=p1 ^ b1 * p2 ^ b2 *…*pn ^ bn
lcm(a,b)=p1 ^ max(a1,b1) * p2 ^ max(a2,b2) *…*pn ^ max(an,bn)