这并不是关于我怎么做的,更多的是关于这个方法有什么问题。我设法用其他方法解决了这个问题,但是我不知道为什么我不能用这个方法。我在这里错过了什么?
输入实例: 4,6预期产出: 12实际产出:4
n1, n2 = map(int, input("n1 and n2: ").split(','))
def lcmCalc (n1,n2):
i = 2
lcm = 1
while (n1 != 1) and (n2 != 1):
if n1 % i == 0 and n2 % i == 0:
lcm *= i
n1 = n1/i
n2 = n2/i
elif n1 % i != 0 and n2 % i == 0:
lcm *= i
n2 = n2/i
elif n1 % i == 0 and n2 % i != 0:
lcm *= i
n1 = n1/i
else:
i += 1
return lcm
print(lcmCalc(n1,n2))发布于 2020-06-18 09:04:08
你们关系很好。以下是编辑:
def lcmCalc(n1, n2):
i = 2
lcm = 1
while (n1 != 1) and (n2 != 1):
if n1 % i == 0 and n2 % i == 0:
lcm *= i
n1 = n1 // i # <== use floor division operator
n2 = n2 // i
elif n2 % i == 0: # <== remove unneeded 2nd test
lcm *= i
n2 = n2 // i
elif n1 % i == 0: # <== remove unneeded 2nd test
lcm *= i
n1 = n1 // i
else:
i += 1
return lcm * n1 * n2 # <== need to include residuals当外部循环结束时,n1或n2中的任何一个仍可能高于1。这一剩余部分需要列入结果。
发布于 2020-06-18 09:04:02
我很想利用这种关系:
lcm(a,b) = |a.b| / gcd(a,b)
当然,gcd(a,b) = gcd(b,a%b) & gcd(a,0) =a
所以我的密码是:
def gcd(a,b):
if b ==0:
return a
else:
return gcd(b, a % b)
def lcm(a,b):
return int(abs(a*b) / gcd(a,b))或者-如果你不反对标准库的一点帮助:
from math import gcd
def lcm(a,b):
return int(abs(a*b) / gcd(a,b))发布于 2022-09-09 13:40:23
def lcm(num1,num2):
for x in range(1,max(num1,num2)):
if (num1 % x) == 0 and (num2 % x) == 0:
e=x
lcm = (num1 * num2) / e
return lcmhttps://stackoverflow.com/questions/62445937
复制相似问题