《九章算术》中有约分术:
可半者半之,不可半者,复置分母子之数,以少减多,更相减损,求其等也,以等数约之。
在这里,以这种方法求最大公约数,采用函数递归的方法,python实现。
def gcd(a, b, base = 1):
while a % 2 == 0 and b % 2 == 0:
a = a / 2
b = b / 2
base = base * 2
if a < b:
a, b = b, a
if a == b:
return a * base
return gcd(a - b, b, base)
a = input("a: ")
b = input("b: ")
a = int(a)
b = int(b)
c = gcd(a, b)
print("gcd of %d and %d is %d" % (a, b, c))