我只是在学习用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


希望有帮助,祝你好运:)

10-06 11:18