如何使用range()在Python中迭代大数?

时间:2013-03-31 01:48:38

标签: python loops largenumber

我想使用Python中的range()函数迭代大量的数字,如600851475143。但每当我运行程序时,它都会给我一个OverflowError。 我使用了以下代码 -

um = long(raw_input())
for j in range(1,num):
....

我已经尝试了很多次但它没有用!

3 个答案:

答案 0 :(得分:5)

如果您的索引是长数,请使用itertools.islice()

from itertools import islice, count
islice(count(start, step), (stop-start+step-1+2*(step<0))//step)

Python 3的range()也可以处理python long。

根据您的情况简化:

for j in islice(count(1), num - 1):

答案 1 :(得分:2)

尽管xrange似乎达到了你想要的效果,但却无法处理那么大的数字。您可能需要使用here

中的此配方
  

CPython实现细节:xrange()旨在简单快速。实现可能会对此实施限制。 Python的C实现将所有参数限制为本机C long(“短”Python整数),并且还要求元素的数量适合本机C long。如果需要更大的范围,可以使用itertools模块制作备用版本:islice(count(start, step), (stop-start+step-1+2*(step<0))//step)

答案 2 :(得分:1)

不要用于,使用时

counter = long(1)
while counter < num:
    ...