【发布时间】:2011-06-12 17:03:25
【问题描述】:
我想使用我在网上找到并稍作改动的算法生成两个非常大的素数。
我在第 5 行收到此错误:
Python OverflowError: cannot fit 'long' into an index=sized integer
我的代码:
import math
def atkin(end):
if end < 2: return []
lng = ((end/2)-1+end%2)
**sieve = [True]*(lng+1)**
for i in range(int(math.sqrt(end)) >> 1):
if not sieve[i]: continue
for j in range( (i*(i + 3) << 1) + 3, lng, (i << 1) + 3):
sieve[j] = False
primes = [2]
primes.extend([(i << 1) + 3 for i in range(lng) if sieve[i]])
return primes
如何解决我的错误?
如果您知道生成大素数的更好方法,那也会很有帮助。
【问题讨论】:
-
你试过这个代码来处理小数字吗?如果您想使用大数字,您应该尝试gmplib.org 库。这个库有一个 Python 包装器,对我来说效果很好。
-
是的,该代码适用于较小的数字。我用它检查了 1 到 100 之间的素数,它是正确的。谢谢你的链接,我去看看。
-
这里讨论的算法有很多方法可以快速获得更大的素数:stackoverflow.com/questions/2897297/…