0

Euler プロジェクトの問題 12 を解決しようとしています。約数が 500 を超える最初の三角形の数の値は? (7 番目の三角形の数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 になります)。これは私のコードですが、十分に高速ではありません..最適化のヒントはありますか?

n=0
a=0
list=[]
maxcount=0


while True:
    n+=1
    a+=n
    count=0
    for x in range(1,int(a+1)):
        if a%x==0:
            count+=1   
            if count>maxcount:
                maxcount=count
                print a, "has", maxcount, "dividors"

ありがとうございました!

4

3 に答える 3

0

数論とは別に: キャッシングを試してみてください。例: 300 には 18 の約数があること (およびその約数) が既にわかっている場合、それは 300 で割り切れる数に対して何を意味するのでしょうか? そのような情報をキャッシュできますか? (できますよ。)

純粋な python 高速化ハックは役に立ちません。より良いアルゴリズムが必要です。

于 2013-04-12T16:30:23.163 に答える