def max_prime(x):
for i in range(2,x+1):
if x%i == 0:
a = i
x = x/i
return a
max_prime(600851475143)
运行需要太多时间。有什么问题?
答案 0 :(得分:0)
您的代码存在一些问题:
//
进行整数除法而不是/
(这将返回浮点数)。24
,其分解为2*2*2*3
。在尝试下一个数字之前,您需要将x
除以2
三次。x
的初始值。您可以在x
到达1
后停止(您知道此时已达到最高除数)。一旦解决了这三个问题,您的解决方案就能正常运行。
答案 1 :(得分:0)
==> projecteuler3.py
import eulerlib
def compute():
n = 600851475143
while True:
p = smallest_prime_factor(n)
if p < n:
n //= p
else:
return str(n)
# Returns the smallest factor of n, which is in the range [2, n]. The result is always prime.
def smallest_prime_factor(n):
assert n >= 2
for i in range(2, eulerlib.sqrt(n) + 1):
if n % i == 0:
return i
return n # n itself is prime
if __name__ == "__main__":
print(compute())
答案 2 :(得分:0)
您的解决方案正在尝试迭代最多600851475143,这不是必需的。您只需要迭代到最大素数的平方根即可。
from math import sqrt
def max_prime_factor(x):
i = 2
while i ** 2 <= x:
while x % i == 0: # factor out ALL multiples of i
x //= i
i += 1
return x
print(max_prime_factor(600851475143))