刷题日记--最大公约数与最小公倍数

最大公约数(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);
}

你可能感兴趣的:(算法技能,gcd)