在python中处理大整数

时间:2013-10-22 11:02:43

标签: python

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

对于小整数,它可以工作,最多只能说7位数。但对于大整数,不是说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

1 个答案:

答案 0 :(得分:3)

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

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

在64位计算机上,该列表所需的70368735789056整数将需要大约1.5 petabytes 的内存,甚至不需要使用那么多64位指针计算列表对象。难怪你的内存耗尽。

通常,您使用xrange() function来生成稀疏范围可迭代,但该对象无法处理长数。 while循环就足够了:

i = 2
while i < p1:
    s = long((i*i)-8)
    if (s%p==0):
        print i
    i += 1