5

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

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

我已经尝试了很多次,但它不起作用!

4

3 回答 3

4

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

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

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

简化为您的情况:

for j in islice(count(1), num - 1):
于 2013-03-31T01:51:22.293 回答
2

尽管xrange似乎达到了您想要的效果,但它无法处理那么大的数字。你可能需要从这里使用这个食谱

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

于 2013-03-31T01:51:41.940 回答
1

不用于,使用 while

counter = long(1)
while counter < num:
    ...
于 2013-03-31T04:09:19.883 回答