最大公约数
将数a,b的最大公约数记为gcd(a, b)
虽然依次试除也能得到最大公约数,但是还有更简单、高效、优美的算法——辗转相除法
辗转相除法的原理是基于以下恒等式:gcd(a, b) = gcd(b, a mod b),以及边界条件gcd(a, 0) = a
代码实现如下
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a%b)
以上就是传说中的欧几里得算法
最小公倍数
将数a,b的最小公倍数记为lcm(a, b)
则gcd(a, b) * lcm(a, b) = a*b,
lcm(a, b) = a*b/gcd(a, b)
证明过程如下
设,
则,
显然a*b = gcd(a, b) * lcm(a, b)