前言
文章标题的灵感——伽利略的「关于托勒密和哥白尼两大世界体系的思考」。hh,强行拉关系。
最大公约数
greatest common divisor(gcd)
如何找到两个数的最大公倍数
令m是a、b的最大公约数,则有
其中x、y是整数。
令c = a - b,那么
其中x-y也是整数,综上我们有
为了尽快结束递归的过程,我们可以加快这一进程,具体在下面的python实现的算法中。
python实现
# 最大公约数 greatest common divisor
def gcd(a,b):
if a < b:
a,b = b,a
q,c = divmod(a,b)
if c == 0:
return b
else:
return gcd(b, c) # c = a - b*q
之所以减去q倍的b,那是因为想要这个相减的过程尽可量的快速。
最小公倍数
least common multiple(lcm) 求最小公倍数,就是求最大公约数。因为给两个数a、b,存在如下等式关系
a * b = gcd(a,b) * lcm(a,b)
举个例子,求 60 与 110 对两个数进行质因数分解
60 = 2*2*3*5
110 = 2*5*11
60 * 110 = (2*2*3*5 ) * (2*5*11 ) = (2*2*3*5*11) *(2*5) = lcm(110,60) * gcd(110,60)
资料来源
《美丽的数学》