私はEuler Project No 12を解決するためにこのコードを書いていますが、コードが遅くなります。このコードをもっと速くするにはどうすればよいですか?
どうすれば速く動作させることができますか?私は除数を見つけることについていくつかの示唆を読んだが、n
にsqrt
を使用するという論理を理解していない。
あなたはその論理を説明できますか? 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] 'の場合、この点の後には除数は見つかりません。それはあなたのコードをより速くします。 –
私はすでにこの方法を知っていますが、sqrtを使用するロジックが必要です –
質問は「int(math.sqrt(n))+ 1」で停止する必要がありますか? – Adirio