これは非常にばかげた方法です:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
私が得たい結果はこれに似ていますが、よりスマートなアルゴリズムが必要です(このアルゴリズムは非常に遅くて馬鹿げています:-)
素因数とその多様性を十分に速く見つけることができます。私はこのように因子を生成するジェネレーターを持っています:
(factor1、multiplicity1)
(factor2、multiplicity2)
(factor3、multiplicity3)
など...
すなわちの出力
for i in factorGenerator(100):
print i
です:
(2, 2)
(5, 2)
これが自分のやりたいことにどれほど役立つかわかりません(他の問題のためにコード化しました)。とにかく、よりスマートな方法で
for i in divisorGen(100):
print i
これを出力:
1
2
4
5
10
20
25
50
100
更新:グレッグ・ヒューギルと彼の「スマートな方法」に感謝します:) 100000000のすべての除数を計算すると、私のマシンで馬鹿げた方法が取った39に対して彼の方法で0.01秒かかりました。非常にクールです:D
更新2:これがこの投稿の複製であると言うのをやめます。与えられた数の約数を計算するのに、すべての約数を計算する必要はありません。それは別の問題です。そうでない場合は、ウィキペディアで「除数関数」を探してください。投稿の前に質問と回答を読んでください。トピックが何であるかがわからない場合は、役に立たず、すでに回答されているものを追加しないでください。