最小公倍数(LCM)-Python
这与我如何做无关,更多的是关于这种方法的错误。我设法用其他方法解决了这个问题,但我不知道为什么我不能用这个方法。我错过了什么 输入示例:4,6 预期产出:12 实际产出:4最小公倍数(LCM)-Python,python,math,lcm,Python,Math,Lcm,这与我如何做无关,更多的是关于这种方法的错误。我设法用其他方法解决了这个问题,但我不知道为什么我不能用这个方法。我错过了什么 输入示例: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
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))
我很想利用这种关系: 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))
你很接近。以下是编辑:
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
def lcmCalc(n1,n2):
i=2
lcm=1
而(n1!=1)和(n2!=1):
如果n1%i==0和n2%i==0:
lcm*=i
n1=n1//i#在Python3中,需要对int(floor)除法使用
/
。否则你会得到一个浮点数。在这种情况下,这无关紧要,因为我只对%==0的东西进行除法,这取决于你想要的结果是浮点数还是整数。好吧,以防万一,我在所有除法中都加了/。仍然得到与以前相同的错误LCM。您应该在问题中包括这些信息:示例输入、预期输出、实际输出。也许您想包括为什么/
相关