2017-02-15 57 views
0

我是一个初学者,我在做第三个问题,这是关于找到600851475143最大的素因子,我得到这个错误:Python溢出错误:整数太大,转换为C长

的Python INT太大,转换为C长

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)) 
+1

你在哪里转换为“长”? –

+1

[OverflowError Python int太大而无法转换为C long]的可能重复(http://stackoverflow.com/questions/22114088/overflowerror-python-int-too-large-to-convert-to-c-long) –

+0

我没有,我使用Windows PowerShell来运行该脚本,并显示错误本身 – Oxide

回答

2

烦人,在Python 2,xrange需要它的参数,以适应成C long600851475143对于您的系统来说太大了。您必须重写您的算法,以便不需要这么大的范围,或者使用替代方法(例如自己的xrange实现)或带有手动计数器管理的while循环。

-2

出现这种情况,当你正在处理的数量大于sys.maxsize

你可能使用numpy的模块,并使用更大的数据类型。不知道你需要多大而不检查。