2015-09-19 102 views
2

我正在使用Python的Project Euler的problem 3,但我似乎無法解決問題,但未遇到以下錯誤:「OverflowError:range()result has too many items」for循環中的溢出錯誤

我想知道是否有辦法增加允許的範圍?我的代碼如下:

target = 600851475143 
largest_prime_factor = 1 

#find largest prime factor of target 
for possible_factor in range(2,(target/2)+1): 
    if target % possible_factor == 0: 
     is_prime = True 
     for i in range(2,(possible_factor/2)+1): 
      if possible_factor % i == 0: 
       is_prime = False 
       break 
     if is_prime: 
      largest_prime_factor = possible_factor 

print largest_prime_factor 

回答

2

如果碰上限制您的計算機或語言的同時試圖解決一個拼圖問題,或者如果時間過長,它是可能存在的跡象更好的方法(閱讀:算法)來解決問題。在你的情況下,你不需要循環到target/2 + 1(儘管這是一個良好的教育上限)。你只需要去ceil(sqrt(target))


而且,作爲一個阿里納斯,您可以通過使用xrange,這將創建一個發電機,而不是range爲Python 2,這將創建一個列表克服這個限制。在Python 3中,默認情況下,range將返回sequence type而不是list

感謝@Fernando在評論中的澄清。

+0

錯字在最後一句。它應該是'range'而不是'xrange'。另外,在Python 3中,'range'是[序列類型](https://docs.python.org/3.5/library/functions.html#func-range),而不是返回生成器的函數。 –