如何让这个脚本更快一点?

时间:2013-03-06 10:57:44

标签: python multiprocessing

for i in xrange(1, 600851475141):
  if 600851475141 % i == 0:
    print i

这花费了太多时间。 是否可以加快速度?

1 个答案:

答案 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