Python溢出错误:int太大而无法转换为C long

时间:2017-02-15 17:43:35

标签: python python-2.7

我是初学者,我在做第三个问题时遇到问题,这是关于找到最大的素数因素600851475143,我得到了这个错误:

Python int太大而无法转换为C long

plist = [2]


def primes(min, max):
    if 2 >= min:
        yield 2
    for i in xrange(3, max, 2):
        for p in plist:
            if i % p == 0 or p * p > i:
                break
        if i % p:
            plist.append(i)
            if i >= min:
                yield i


def factors(number):
    for prime in primes(2, number):
        if number % prime == 0:
            number /= prime
            yield prime
        if number == 1:
            break

a = 600851475143
print max(factors(a))

2 个答案:

答案 0 :(得分:2)

令人讨厌的是,在Python 2中,xrange要求其参数适合C long600851475143对您的系统来说太大了。您必须将算法重写为不需要如此大的范围,或者使用替代方法,例如您自己的xrange实现,或者使用手动计数器管理的while循环。

答案 1 :(得分:-2)

当您处理的号码大于sys.maxsize

时会发生这种情况

您可以使用numpy模块并使用更大的数据类型。不确定你需要多大的东西。