最大公约数
最大公约数(greatest common divisor):辗转相除法( 欧几里得算法)
用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
// 迭代, a > b, 且b不为0
int gcd(int a, int b)
{
while(a % b){
int tmp = a;
a = b;
b = tmp % b;
}
return b;
}
// 递归写法
int gcd(int a, int b)
{
// return b == 0 ? a : gcd(b, a % b); // a, b可以为0
return a % b == 0 ? b : gcd(b, a % b); // b不能为0
}
// 函数
__gcd(a, b);
最小公倍数
最小公倍数 = 两数之积除以最大公约数
#include<algorithm>
/* C++ 最小公倍数 = 两数之积除以最大公约数 */
return (a * b) / __gcd(a, b);