传送门
求两个数的最大公约数和最大公倍数:用辗转相除法(欧几里得算法)
动画演示(来自维基百科)
主要步骤如下:
①两个数从大到小排列
②
代码实现:
a,b = map(int,input().split())
if a<b:#取两个数当中较大的数
temp = a
a = b
b = temp
c = a % b
temp = a * b
while c != 0:#将余数不断地参与运算,直到余数为0
a = b
b = c
c = a % b
print(b,int(temp/b))
方法二:
def f3(a,b):
if a>b:
smaller = b
else:
smaller = a
for i in range(smaller+1):
if a%(smaller-i)==0 and b%(smaller-i)==0:
return smaller - i
print("%d是最大公约数" %f3(12,36))
def f2(m,n):
if m>n:
greater = m
smaller = n
else:
greater = n
smaller = m
i = 1
while True:
if greater * i % smaller == 0:
return greater * i
i += 1
print("%d是最小公倍数" %f2(12,18))