我只是在学习用python编写代码,并且真的很喜欢通过Euler项目并尝试解决这些问题。我在问题3上,要求我们找到最大的素数600851475143。我已经编写了下面的代码来做到这一点,它对于较小的值非常有用,可以测试到540995,但是一旦尝试将其放宽即可600851475143,我得到一个错误:
50.95秒后,程序被未捕获的信号#9终止。
我正在运行OS 10.12的Mac上使用Python 2.7.13在TextMate上编写此代码。 Google没有帮助我找到解决方案。我将不胜感激。
这是我正在执行的代码:
n = 600851475143
fList = []
pList = []
# factor n starting with largest factor
for i in range(n-2, 2, -2):
# if prime factor list is empty
if len(pList) == 0:
if n % i == 0:
factor = i
# as a factor is found, test for primality
for k in range(factor-2, 2, -2):
if factor % k == 0:
if factor not in fList:
fList.append(factor)
if factor not in fList:
pList.append(factor)
print(pList)
感谢您的见解!
最佳答案
您的内存不足。因此,您的解决方案最多可使用540995,与600851475143相比,该数字相对较小。请记住,您正在执行嵌套循环,因此算法的运行时为O(n)^2
。换句话说,您的循环运行了很多次。您可以找到有关算法复杂度here的更多信息。话虽这么说,我将如何解决这个问题
n = 600851475143
i = 2
while i * i < n:
while n % i == 0:
n = n / i
i = i + 1
print n
希望有帮助,祝你好运:)