我做了下面的代碼: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的大小更大。