【发布时间】:2018-03-07 13:13:34
【问题描述】:
我想要一个程序来生成最高 10^9 的素数。 我正在使用 Eratosthenes 的 Sieve 在 python 中实现它,但是当我尝试 10^9 时出现内存错误。它工作正常,直到 10 ^ 7。 这是我正在使用的代码
def prime(n):
p=[True]*(n+1)
p[0]=p[1]=False
for i in range(int(n**0.5)+1):
if p[i]:
for j in range(i*i, n+1, i):
p[j] = False
for i in range(n+1):
if p[i]:
yield i
我使用的是 6GB 内存的 Windows 10
【问题讨论】:
-
你用的是64位还是32位的python?前段时间我自己解决了内存问题,并通过切换到 64 位 python 来解决。另外:除非你不得不,否则用python脚本吃掉这么多内存并不是一个好主意
-
@MaLiN2223 64 位。
-
你可能想试试 NumPy 数组
-
您可以尝试使用分段筛。它对内存更友好。如果我没记错的话,有一个使用生成器的聪明的 python 实现。
-
如果您使用的是 Python 2,那么在两个循环中都更喜欢
xrange而不是range。
标签: python algorithm sieve-of-eratosthenes