运行最小除数的代码:
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())
答案 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())