在迈克尔·迈尔(Michael Mior)的建议下,我and了oke。我尝试使用一些技巧来使其快速。
由于我们需要一个相对较短的数字列表,因此我们可以预先构建数字列表,而不用反复调用xrange()
或range()
。
另外,虽然只将数字[1, 2, 3, ..., 20]
放在列表中是可行的,但我们可以考虑一下,然后取出数字:
只需取出1。每个整数均可以被1整除。
如果我们将20英寸留在,则无需保留2英寸。任何被20整除的整数都可以被2整除(但反之可能不成立)。因此,我们留下20,取出2、4和5。保留19,因为它是素数。保留18,但现在我们可以取出3和6。如果重复此过程,最后会出现一个简短得多的数字列表。
正如迈克尔·迈尔(Michael Mior)所建议的,我们从20开始,然后以20为步长。all()
正如戳建议的那样,我们在中使用了生成器表达式。
取而代之的是中while
环,我用了一个for
环带xrange()
; 我认为这稍微快一点。
结果:
check_list = [11, 13, 14, 16, 17, 18, 19, 20]
def find_solution(step):
for num in xrange(step, 999999999, step):
if all(num % n == 0 for n in check_list):
return num
return None
if __name__ == '__main__':
solution = find_solution(20)
if solution is None:
print "No answer found"
else:
print "found an answer:", solution
在我的计算机上,这可以在9秒内找到答案。
编辑:而且,如果我们听取大卫·扎斯拉夫斯基(David Zaslavsky)的建议,我们意识到我们可以在2520开始循环,然后在2520之前完成。如果我这样做,那么在我的计算机上,我会在十分之一秒内得到正确的答案。
我提出了find_solution()
一个论点。尝试致电find_solution(2520)
。