2

我在 python 中编写了一个程序来查找b素数p除以b^2-8. 的范围b 是 [1, (p+1)/2]。

对于小整数,它可以工作,最多只能说 7 位数字。但不适用于大整数,例如 for p = 140737471578113。我收到错误消息

    for i in range (2,p1,1):
MemoryError

我把程序写成

#!/usr/bin/python3
p=long(raw_input('enter the prime number:'))
p1=long((p+1)/2)
for   i in range (2,p1,1):
    s = long((i*i)-8)
    if (s%p==0):
        print i
4

1 回答 1

3

在 Python 2 上,该range()函数创建一个完整的整数列表:

>>> range(3)
[0, 1, 2]

在 64 位机器上,仅该列表所需的 70368735789056 个整数将需要近 1.5 PB的内存,甚至不计算具有那么多 64 位指针的列表对象。难怪你的内存用完了。

通常,您会使用该xrange()函数来生成稀疏范围的可迭代对象,但该对象无法处理长数字。一个while循环在这里就足够了:

i = 2
while i < p1:
    s = long((i*i)-8)
    if (s%p==0):
        print i
    i += 1
于 2013-10-22T11:07:35.007 回答