Python overflowerror

时间:2013-12-27 15:43:24

标签: python python-2.7

我正在使用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

3 个答案:

答案 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.isliceitertools.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)

答案 2 :(得分:0)

在python 2.x range()中返回一个列表,该列表的容量有限(可用内存和64位Py的最大long 2 ^ 64 -1)因此可能产生OverflowError包含大型数据集。

因此,规定的解决方案是使用xrange()返回一个生成器,该生成器没有固定的容量或受intlong数字约束以进行索引。