2015-09-19 46 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),而不是返回生成器的函数。 –