我无法理解为什么以下代码没有给我任何东西?

时间:2015-11-23 02:52:15

标签: python

运行最小除数的代码:

def smallesteuler():
    t=0
    result=[]
    for no in range(11,10000):
        for i in range(1,11):
            if (no%i==0):
                t=t+1
            if(t==20):
                return result.append(no)
        t=0
print (smallesteuler())

2 个答案:

答案 0 :(得分:1)

这看起来像欧拉问题5 - 找到1..20的最小公倍数。

您的代码可以重写为

def euler5(upto=20):
    """
    Find the least common multiple of 1..upto
    """
    num = upto
    while True:
        if all(num % factor == 0 for factor in range(2, upto+1)):
            return num
        else:
            num += 1
然而,更有效的解决方案是

from fractions import gcd
from functools import reduce

def lcm(a, b):
    return a * b // gcd(a, b)

def euler5(upto=20):
    return reduce(lcm, range(1, upto+1))

第一种解决方案是O(n!),第二种解决方案是O(n ** 2)。

答案 1 :(得分:0)

看起来您正在尝试收集满足no%i==0的前20个数字。您必须将这些数字附加到result,然后return result

def smallesteuler():
    t=0
    result=[]
    for no in range(11,10000):
        for i in range(1,11):
            if (no%i==0):
                result.append(no)
                t=t+1
            if(t==20):
                return result

print (smallesteuler())