用函数求最大公因数和最小公倍数,为什么我的打印结果只有一个1,没有最小公倍数14呢
def zuidagys(n,m):
a=min(n,m)
b=max(n,m)
while a>=1:
if n%a==0 and m%a==0:
return a
a -= 1
while 1==1:
if b%n==0 and b%m==0:
return b
break
b+=1
l=zuidagys(2,7)
print(l)
你要返回多个值,应该用 yield,而不是 return
def zuidagys(n,m):
a=min(n,m)
b=max(n,m)
while a>=1:
if n%a==0 and m%a==0:
yield a
a -= 1
while 1==1:
if b%n==0 and b%m==0:
yield b
break
b+=1
l=zuidagys(2,7)
print(','.join(map(str, l)))
求最小公倍数没有捷径可走,我们知道小时候学的“短除法”求最小公倍数,就是将两个数所有的约数,乘到一起再乘以下面的两个数字,如图:
最小公倍数就是2∗2∗3∗42*2*3*42∗2∗3∗4,所以只要求出最大公约数,在乘上每个数除以最大公约数的值即可。
不废话了,上代码:
import math
s = list(map(int,input().split()))
def gbs(s):
a,b = s[0],s[1]
a = a // math.gcd(a, b) * b // math.gcd(a, b) * math.gcd(a, b)
if len(s)>2:
for i in range(2,len(s)):
b = s[i]
a = a//math.gcd(a,b) * b//math.gcd(a,b) * math.gcd(a, b)
return a
print(gbs(s))
看输入输出:
输入:10 16 4
输出:80
小白欢迎指点~