我做了下面的代码:Python的迭代慢
from math import sqrt
import time
def factors(n):
x=(set(reduce(list.__add__,
([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0))))
return sorted(x,reverse=True)
n=10**7
m=0
start_time = time.time()
for i in xrange(1,int(sqrt(n))+1):
l=0
x=factors(i)
for d in xrange(i,n/i+1):
if i==d:
l+=i
else:
for b in x:
if d%b==0:
l+=2*b
break
m+=l
print i
elapsed_time = time.time() - start_time
print elapsed_time
print m
我想代码的作用是增加我的最大公约数和d所有id≤n
由于“打印我“,我已经意识到,当我很小时,第二个循环很慢。这是为什么?以及如何优化?
我发现d上的迭代将会更大,但不应该是迭代所有值,而对于更大的i,第三个循环应该花费更长的时间,因为x的大小更大。