首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中计算给定数字列表的LCM

在Python中计算给定数字列表的LCM
EN

Stack Overflow用户
提问于 2016-05-15 19:52:53
回答 19查看 46.3K关注 0票数 19

我已经写了一个代码来找出一个数字列表的LCM (最小公倍数),但我的代码中似乎有一个错误。代码如下:

代码语言:javascript
复制
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]))

请原谅我糟糕的变量选择,我请求你看看逻辑是否正确,代码是否有效。

我得到的语法错误是“”是无效的语法因子,尽管我不同意这一点。请告诉我我的代码哪里错了。

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2017-02-27 03:01:55

这是我所知道的最好的方法:

代码语言:javascript
复制
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)

希望这能有所帮助。欢迎所有查询、贡献和评论:)

票数 45
EN

Stack Overflow用户

发布于 2018-04-13 19:34:21

适用于任意长度的分母列表。

代码语言:javascript
复制
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)

示例:

代码语言:javascript
复制
>>> lcm([100, 200, 300])
600
票数 19
EN

Stack Overflow用户

发布于 2019-02-09 01:09:57

在Numpy v1.17 (在编写时,它是非发布开发版本)中,有一个lcm函数可以用于两个数字,例如:

代码语言:javascript
复制
import numpy as np
np.lcm(12, 20)

或者对于多个数字,例如:

代码语言:javascript
复制
np.lcm.reduce([40, 12, 20])

还有一个gcd函数。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37237954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档