我已经写了一个代码来找出一个数字列表的LCM (最小公倍数),但我的代码中似乎有一个错误。代码如下:
def final_lcm(thelist):
previous_thelist = thelist
prime_thelist = list(set(thelist) - set(returns_new_thelist(previous_thelist))
factors = 1
for i in prime_thelist:
factors = factors*i
new_thelist = returns_new_thelist(previous_thelist)
for i in range(1, 10000000000):
s_empty = []
for j in new_thelist:
if i % j == 0:
s_empty.append(True)
if len(new_thelist) == len(s_empty):
initial_lcm = i
break
final_lcm = factor*initial_lcm
return final_lcm
def returns_new_thelist(ll):
if 3 in ll:
ll.remove(3)
for i in ll:
if checks_if_prime(i) == True:
ll.remove(i)
return ll
def checks_if_prime(n):
if n == 2:
return True
import math
for i in range(math.ceil(0.5*n), 1, -1):
if n % i == 0:
return False
elif i == 2:
return True
print(final_lcm([1,2,3,4,5,6,7,8,9]))
请原谅我糟糕的变量选择,我请求你看看逻辑是否正确,代码是否有效。
我得到的语法错误是“”是无效的语法因子,尽管我不同意这一点。请告诉我我的代码哪里错了。
发布于 2017-02-27 03:01:55
这是我所知道的最好的方法:
from math import gcd
a = [100, 200, 150] #will work for an int array of any length
lcm = 1
for i in a:
lcm = lcm*i//gcd(lcm, i)
print(lcm)
希望这能有所帮助。欢迎所有查询、贡献和评论:)
发布于 2018-04-13 19:34:21
适用于任意长度的分母列表。
from math import gcd # Python versions 3.5 and above
#from fractions import gcd # Python versions below 3.5
from functools import reduce # Python version 3.x
def lcm(denominators):
return reduce(lambda a,b: a*b // gcd(a,b), denominators)
示例:
>>> lcm([100, 200, 300])
600
https://stackoverflow.com/questions/37237954
复制相似问题