我正在检查http://projecteuler.net/上的问题

第三个问题如下:


  13195的主要因素是5、7、13和29。最大的是什么
  数的素数600851475143?


我的解决方案代码如下。但它是如此之慢,以至于我认为将需要数周才能完成。
我该如何改善?还是Python本身太慢而无法解决此问题?

def IsPrime(num):
    if num < 2:
        return False
    if num == 2:
        return True
    else:
        for div in range(2,num):
            if num % div == 0:
                return False
        return True

GetInput = int (input ("Enter the number: "))


PrimeDivisors = []

for i in range(GetInput, 1, -1):
    print(i)
    if GetInput % i == 0 and IsPrime(i) is True:
        PrimeDivisors.append(i)
        break
    else:
        continue


print(PrimeDivisors)
print("The greatest prime divisor is:", max(PrimeDivisors))

最佳答案

解决方案的问题在于,您没有考虑到发现的主要因素,因此在您真正找到最大因素之后就不必检查这些因素。这是我的解决方案:

def largest_prime_factor(n):
    largest = None

    for i in range(2, n):
        while n % i == 0:
            largest = i
            n //= i

        if n == 1:
            return largest

    if n > 1:
        return n


欧拉计画的问题更多是数学问题,而不是程式设计问题,因此,如果您的解决方案速度太慢,可能不是您的语言出了问题。

请注意,我的解决方案偶然会针对此特定数字快速运行,因此绝对不是一般的解决方案。在此特定情况下,更快的解决方案are complicated和过大的杀伤力。

关于python - 寻找最大的除数(可能最快的程序),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20581491/

10-12 20:55