0

我的代码是:

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 循环存在不适当的参数类型。我不知道这是否意味着它没有将值视为整数,或者正在发生什么。谢谢

4

2 回答 2

1

xrange由于代码作为 C 程序( https://docs.python.org/2/library/functions.html#xrange )执行,因此不适用于大量数字。

根据文档 -

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

我不确定你得到了什么系统规格,但通常 c int 是 2^16-1 而 c long 是 2^32-1。

于 2014-12-24T08:59:14.620 回答
-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
于 2014-12-24T08:56:35.307 回答