最大公约数
a 、 b 的顺序并不影响最终结果,如果 a 、b 是顺序的话,会多一次递归(相当于第一次递归会用来调换大小顺序)。
# 最大公约数 greatest common divisor
# 辗转相除法(递归)
def gcd(a: int, b: int):
if b == 0:
return a
else:
return gcd(b, a % b)
print(gcd(25, 35))
5
最小公倍数
a、b 的最小公倍数 = a、b 的乘积 / a、b 的最大公约数
# 最大公约数
def gcd(a: int, b: int):
if b == 0:
return a
else:
return gcd(b, a % b)
# 最小公倍数 lowest common multiple(以最大公约数的结果为基础)
def lcm(a: int, b: int):
return int((a * b) / gcd(a, b))
print(lcm(25, 35))
175
调用拓展
python 的第三方依赖 numpy 也是支持直接求解 最大公约数 和 最小公倍数的:
>>> import numpy as np
>>> np.gcd(25, 35)
5
>>> np.lcm(25, 35)
175
标准库 math 也是支持的(math.lcm 调用需要 python3.9 及以上的版本):
>>> import math
>>> math.gcd(25, 35)
5
>>> math.lcm(25, 35)
175