辗转相除法(欧几里得算法)求最大公约数
该定理为gcd(a, b) == gcd(b, a%b)
, 意思就是a与b的最大公约数, 跟b与a除b的余数相同. 根据此定理,我们即可写出求最大公约数的算法.
// 递归算法
int gcd(a, b){
if(b == 0) // 当b为0时, a与b的最大公约数为a
return a;
return gcd(b, a % b); //否则带入定理
}
// 迭代算法
int gcd(a ,b){
int temp;
while(b != 0){
temp = b;
b = a % b;
a = temp;
}
return a;
}
求最小公倍数
设p为a与b的最大公约数, a与b的最小公倍数即为a*b/p
int lcm(a, b){
return a*b/gcd(a, b); // gcd(a, b)为a,b的最大公约数
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。