13195 的质因数是 5、7、13 和 29。数字 600851475143 的最大质因数是多少?@ http://projecteuler.net/problem=3
我和自己有个协议,如果我不能解决项目欧拉问题,我会理解我能找到的最佳解决方案。我确实写了一个算法,它适用于较小的数字,但对于较大的数字来说效率太低了。所以我用谷歌搜索了Zach Denton 的答案并开始研究它。
这是他的代码:
#!/usr/bin/env python
import math
def factorize(n):
res = []
# iterate over all even numbers first.
while n % 2 == 0:
res.append(2)
n //= 2
# try odd numbers up to sqrt(n)
limit = math.sqrt(n+1)
i = 3
while i <= limit:
if n % i == 0:
res.append(i)
n //= i
limit = math.sqrt(n+i)
else:
i += 2
if n != 1:
res.append(n)
return res
print max(factorize(600851475143))
以下是我自己无法弄清楚的部分:
- 在第二个 while 循环中,他为什么使用 a
sqrt(n + 1)
而不是 justsqrt(n)
? sqrt(n + 1)
在第一个 while 循环中迭代偶数时, 为什么不使用呢?- 该算法如何设法仅找到主要因素?在我第一次编写的算法中,我有一个单独的测试来检查一个因子是否是素数,但他没有打扰。