最大公约数(gcd)
int gcd(int a, int b)
{
return a % b ? gcd(b, a % b) : b;
}
原理:
先判断a除以b的余数是否为0。
a % b ?
不为0的话,则继续用被除数作为除数,用上一步的余数作为除数继续运算。
a % b ? gcd(b , a%b)
是0的话则b就位两数的最大公约数,则返回b。
a % b ? gcd(b , a%b): b
注 : 这里不用考虑a 和 b的大小。如果a 小于 b, a%b 就等于 a ,则调用gcd (b, a % b)就等同于调用 gcd (b, a) , 所以无需判断是否交换。
最小公倍数(lcm)
最小公倍数 = a * b / 最大公约数
int lcm(int a, int b)
{
return a * b / gcd(a, b);
}