我已經編寫了解決Euler Project No 12的代碼,但是我的代碼運行緩慢。如何讓此代碼更快?
如何讓它運行得更快?我已閱讀了一些有關尋找除數的建議,但我不明白使用sqrt
代替n
的邏輯。
你能解釋一下它的邏輯嗎?
這裏是我的代碼:如果a * b = n
的n
def sumdiv(n):
l=[d for d in range(1,int(n/2)+1) if n%d==0] # used n/2 to short loop
return len(l)+1 # added n itself
trnums=[1,3]
while sumdiv(trnums[-1])<=501:
k=trnums[-1]-trnums[-2]+1
trnums.append(trnums[-1]+k)
print(trnums[-2:])
使用'[d在範圍d (1,int(math.sqrt(n))+ 1)if n%d == 0]',你在這點之後沒有找到任何除數。這將_will_讓你的代碼更快。 –
我已經知道這種方法,但我需要邏輯使用sqrt –
是你的問題「爲什麼我應該停在'int(math.sqrt(n))+ 1'? – Adirio