2017-02-15 58 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的模塊,並使用更大的數據類型。不知道你需要多大而不檢查。