时间复杂度
O(log max(a, b))
最大公约数
代码
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
最小公倍数
代码
int lcm(int a ,int b)
{
return a * b / gcd(b, a % b);
}
更相减损法
int gcd_sub(int a, int b)
{
if (a < b) swap(a, b);
return b == 0 ? a : gcd_sub(b, a - b);
}
拓展用法
已知 qx 和 qy,求 q(x,y)
算法思想
qx / qy = qx-y,当 x-y == 0 时,b == 1
代码
int gcd_sub(int a, int b)
{
if (a < b) swap(a, b);
return b == 1 ? a : gcd_sub(b, a / b);
}