+-

我刚开始学习用 Python编写代码.我正在尝试编写一些代码来回答这个Project Euler问题:
13195的主要因素是5,7,13和29.
600851475143的最大主要因素是什么?
我的程序适用于13195的测试用例,但是当我尝试输入600851475143时,我收到错误:“OverflowError:range()结果有太多项目”
有谁知道我怎么解决这个问题?
这是我的代码:
class Euler3:
"A class to find the largest prime factor of a given number"
n = 600851475143
primeFactors = []
for i in range(2,n):
if (n%i ==0):
primeFactors.append(i)
n = n/i
i = i -1 #reset i
print primeFactors
任何帮助或建议将不胜感激!
最佳答案
范围函数创建一个列表并尝试将其存储在内存中.创建一个很长的列表是造成OverflowError的原因.你可以使用xrange来获得一个按需生成数字的生成器.
也就是说,我认为你会发现你的算法对于计算大质数而言太慢了.有很多素数算法,但我可能会建议将Sieve of Eratosthenes作为起点.
编辑:正确xrange实际上不返回生成器,但xrange对象的行为很像生成器.我不确定你是否在乎,但这让我觉得我不准确!
点击查看更多相关文章
转载注明原文:Python“OverflowError” - 乐贴网