最小公倍数:lcm=(a*b)/gcd(a,b)
辗转相除法
辗转相除法是最常用的方法,核心就是从两个数相除,然后取其余数,即余数赋值给b,b的值赋给a,直至a%b为0。
代码实现:
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
num1 = int(input())
num2 = int(input())
print("{},{}的最大公约数是:{}".format(num1, num2, gcd(num1, num2)))
stein算法
stein算法描述:
对于整数a、b,保证a>b
如果a=0,结果返回b;如果b=0,结果返回a
如果a、b都是偶数,返回a/2、b/2
如果a是偶数,返回a/2,b
如果b是偶数,返回a,b/2
如果a、b均不是偶数,返回b-a,b
最后重复执行此步骤。
代码实现:
def st(a, b):
if a < b:
a, b = b, a
if b == 0:
return a
if (a % 2 == 0) and (b % 2 == 0):
return 2 * st(a // 2, b // 2)
elif (a % 2 == 0) and (b % 2 != 0):
return st(a // 2, b)
elif (b % 2 == 0) and (a % 2 != 0):
return st(a, b // 2)
elif (a % 2 != 0) and (b % 2 != 0):
return st(a-b, b)
num1 = int(input())
num2 = int(input())
print("{},{}的最大公约数是:{}".format(num1, num2, st(num1, num2)))