【问题标题】:Python Overflow error: int too large to convert to C longPython 溢出错误:int 太大而无法转换为 C long
【发布时间】:2017-02-16 02:39:36
【问题描述】:

我是一个初学者,我正在做第三个问题,这是关于找到 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))

【问题讨论】:

标签: python python-2.7


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您处理的数字大于sys.maxsize时会发生这种情况

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

    【讨论】:

    • 没有numpy依赖怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多