【发布时间】:2010-02-25 21:21:05
【问题描述】:
我正在尝试在 python 中实现sieve of eratosthenes,但是当尝试查找直到例如779695003923747564589111193840021 的平方根的所有素数时,我收到一条错误消息,指出 range() 的结果有太多项目。我的问题是,如何避免这个问题,如果我用 while 循环实例化列表,我会收到一个错误,说我使用了太多内存(甚至在它开始使用页面文件之前),下面列出了这两个:
使用范围()
maxnum = 39312312323123123
primes = []
seq = []
i = 0
seq = range(2,maxnum)
for i in seq:
mul = i * seq
for j in mul:
try:
seq.remove(j)
except:
pass
primes.append(i)
print primes
使用while:
maxnum = 39312312323123123
primes = []
seq = []
i = 0
while i < maxnum:
seq.append(i)
i+=1
for i in seq:
mul = i * seq
for j in mul:
try:
seq.remove(j)
except:
pass
primes.append(i)
print primes
【问题讨论】:
-
是的,这是一个学校作业,但我很确定我们应该发现如果不使用 Wolfram Alpa 之类的工具,分解 779695003923747564589111193840021 是非常困难的,但我想尽我所能尝试我的其他(当前)素数查找算法现在已经运行了 22 小时,但没有给我想要的东西。
-
在这台笔记本电脑上输入 "factor(779695003923747564589111193840021)" 到 Maxima 会在大约 3 秒内产生输出:43*167*9059*1510775033423*7933407561613。我认为如果没有 64 位和大量内存和时间,您将无法通过筛选获得这两个最大的。 OTOH,这就是重点吗?
-
except: pass总是错误的。改为捕获实际异常 (ValueError)。
标签: python memory prime-factoring sieve-of-eratosthenes