我的代码是:
def euler7():
prime=1
val=0
for num in xrange(3, 9999999999, 2):
for n in xrange(1, num):
if num%n==0:
numb=0
break
else:
numb=1
val=num
if numb==1:
prime=prime+1
if prime==10001:
return val
但是,它说for循环有一个不适当的参数类型。我不知道这是否意味着它没有将值视为整数,或者发生了什么。感谢
答案 0 :(得分:1)
xrange
不适用于大数字。
根据文件 -
CPython实现细节:xrange()旨在简单明了 快速。实现可能会对此实施限制。 C Python的实现将所有参数限制为本机C long (“短”Python整数),也要求数量 元素适合原生C长。如果需要更大的范围, 可以使用itertools模块制作备用版本: islice(count(start,step),(stop-start + step-1 + 2 *(step< 0))// step)。
我不确定你有什么系统规格,但一般来说c int是2 ^ 16-1而c long是2 ^ 32-1。
答案 1 :(得分:-1)
来自文档:
xrange()
旨在简单快捷。实现可能会对此实施限制。 Python的C实现将所有参数限制为本机C long(“短”Python整数),并且还要求元素的数量适合本机C long。如果需要更大的范围,可以使用itertools模块制作备用版本:islice(count(start,step),(stop-start + step-1)// step)。
Python开始使用long取决于平台,sys.maxint允许您查询该点。在32位Python可执行文件上,该点位于2147483648(10位)。长期只受记忆约束。
我建议使用生成器重新实现xrange():
def myxrange(a1, a2=None, step=1):
if a2 is None:
start, last = 0, a1
else:
start, last = a1, a2
while cmp(start, last) == cmp(0, step):
yield start
start += step