for i in xrange(1, 600851475141):
if 600851475141 % i == 0:
print i
这花费了太多时间。 是否可以加快速度?
答案 0 :(得分:9)
对于小于sqrt(N)
的每个除数,有一个大于sqrt(N)
的互补除数。因此,您只需要找到除数i
,它们小于sqrt(N)
且计算互补除数N//i
。
import math
N = 600851475141
divisors = []
for i in xrange(1, int(math.sqrt(N))+1):
if N % i == 0:
divisors.extend(set((i, N//i)))
for d in sorted(divisors):
print(d)
产量
1
3
11981
35943
16716787
50150361
200283825047
600851475141