最大公因数的三种算法
第一种
运算速度:一般,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 函数就可以很快求最小公倍数了
本文介绍三种求最大公因数(GCD)的算法:辗转相除法、递归三目运算符法及位运算法,并提供代码实现。同时,给出最小公倍数(LCM)的计算公式,结合GCD函数快速求解。
1091

被折叠的 条评论
为什么被折叠?



