【发布时间】:2015-11-26 19:47:17
【问题描述】:
Project Euler 问题 7 说:
通过列出前六个素数:2、3、5、7、11 和 13,我们可以 看到第 6 个素数是 13。第 10001 个素数是多少?
这是我用 Python 编写的代码:
def primes(n):
primes = []
attempt = 3
while len(primes) < (n-1):
for i in range(len(primes)):
if attempt % primes[i] == 0:
attempt += 2
break
else:
primes.append(attempt)
print (primes)
return (primes)
在测试一个数字时,如果它发现该数字可以被列表中的一个素数整除,则 for 循环会中断,并从一个更大的数字重新开始。如果它不可整除,则将其添加到素数列表中。这一直持续到列表尽可能大(在本例中为 10000,我省略了 2,因此列表的最后一个成员是第 10001 个素数)
问题是这非常慢。我已经看到其他解决方案显然可以解决这个问题,如果不是更少的话。有什么方法可以让这件事变得更有趣?
【问题讨论】:
-
搜索“Prime sieve”一词可能会给您带来有用的结果。
-
另外,只需使用
numpy对数字进行简单更改即可加快速度,不要使用那个 for 循环,使用其他方式。 -
如果这是工作代码,请尝试 codereview.stackexchange.com
-
您应该在Code Review 上发布此内容,和/或在Computer Science 上发布有关算法的信息。
标签: python performance optimization primes