我正在使用Python 2.7,我收到以下错误。我该如何解决?
for y in range(1, x/2):
OverflowError:range()结果包含太多项目
CODE:
# Largest Prime Factor
prime = True
x = 600851475143
pNum = 0
for y in range(2, x/2):
if (x % y == 0): # Found a factor
for z in range(2, y/2): # Checking factor for prime
if (y % z == 0): #
prime = False
break
if (prime == True):
pNum = y
prime = True
print pNum
答案 0 :(得分:0)
在python 2.x中,range(1, n)
创建一个 n-1 项目列表。
使用xrange
,除非您确实需要同时使用所有项目。
<强>更新强>
根据xrange
文件:
CPython实施细节:
xrange()
旨在简单明了 快速。实现可能会对此实施限制。 C Python的实现将所有参数限制为本机C long (“短”Python整数),也要求数量 元素适合原生C长。如果需要更大的范围, 可以使用itertools模块制作备用版本:islice(count(start, step), (stop-start+step-1+2*(step<0))//step)
。
使用itertools.islice
,itertools.count
:
from itertools import islice, count
prime = True
x = 600851475143
pNum = 0
for y in islice(count(2), x/2-2):
if (x % y == 0): # Found a factor
for z in islice(count(2), y/2-2): # Checking factor for prime
if (y % z == 0): #
prime = False
break
if (prime == True):
pNum = y
prime = True
print pNum
答案 1 :(得分:0)
尝试xrange而不是范围。
答案 2 :(得分:0)
在python 2.x range()
中返回一个列表,该列表的容量有限(可用内存和64位Py的最大long
2 ^ 64 -1)因此可能产生OverflowError
包含大型数据集。
因此,规定的解决方案是使用xrange()
返回一个生成器,该生成器没有固定的容量或受int
或long
数字约束以进行索引。