最大公因数的三种算法
第一种
运算速度:一般,a、b都可以是0
int gcd(int a,int b)
{
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
第二种
三目运算符(常用)
运算速度:较快,a、b都可以是0
int gcd(int a,int b)
{
return b>0? gcd(b,a%b):a;
}
第三种
位运算
运算速度:较快,a、b不能为0
int gcd(int a,int b)
{
while(b^=a^=b^=a%=b);
return a;
}
(b^=a^=b^=a%=b)
相当于(b^=(a^=(b^=(a%=b))))
相当于a%=b,b^=a,a^=b,b^=a
其中b^=a,a^=b,b^=a
相当于swap(a,b)
,详见卡常技巧第3条。
所以(b^=a^=b^=a%=b)
等价于a%=b,swap(a,b)
,这就是gcd
函数的一般写法。
最小公倍数
最小公倍数只需要知道一个公式就好了
最小公倍数=两整数的乘积÷最大公约数
结合上面的 gcd
函数就可以很快求最小公倍数了