如何循环模数?

时间:2018-09-12 15:19:19

标签: python lcm

新手在这里。我一直在尝试寻找数字1到10的最小公倍数。到目前为止,我的代码

def smallest_multiple():
a = 0
while True:
    a += 1
    if a%1 == 0 and a%2 == 0 and a%3 == 0 and a%4 == 0 and a%5 == 0 and a%6 == 0 and a%7 == 0 and a%8 == 0 and a%9 == 0 and a%10 == 0:
        return a

print(smallest_multiple())

我的结果是2520,这似乎是正确的。它是可被数字1到10整除的最小数字,无余数。但是,有没有办法通过遍历5条线来使它们更短(而不是那么多模数)?我已经尝试过这样的事情

def smallest_multiple():
a = 0
while True:
    a += 1
    for i in range(1, 11):
        if a % i == 0:
            return a

print(smallest_multiple())

但是返回的只是1,而不是2520。有没有办法制作

if a%1 == 0 and a%2 == 0 and a%3 == 0 and a%4 == 0 and a%5 == 0 and a%6 == 0 and a%7 == 0 and a%8 == 0 and a%9 == 0 and a%10 == 0:

更短?

3 个答案:

答案 0 :(得分:1)

您可以将其更改为

if all([a%i == 0 for i in range(1,11)]):

全部获取一个列表,如果列表中的所有内容均为True,则返回True

这使用简单的列表理解来遍历数字1到10,并使用a%i == 0检查它们是否全部为真

答案 1 :(得分:1)

您可以使用all

def smallest_multiple():
    factors = [i for i in range(1, 11)]
    a = 0
    while True:
        a += 1
        if all([a % factor == 0 for factor in factors]):
            return a


print(smallest_multiple())

输出

2520

更新

如@PatrickHaugh所建议,您可以避免创建列表:

def smallest_multiple():
    factors = range(1, 11)
    a = 0
    while True:
        a += 1
        if all(a % factor == 0 for factor in factors):
            return a


print(smallest_multiple())

输出

2520

答案 2 :(得分:0)

谈到一线^^

虽然不是无限循环

import sys
next(i for i in xrange(1, sys.maxsize) if len([j for j in range(1,10) if i % j == 0]) == 9)
#=> 2520

这不是最有效的解决方案。