我在python中编写了一个程序来查找b
,使得素数p
除以b^2-8
。 b
的范围是[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
答案 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