[解決済み] ある数のすべての約数を求める最良の方法は何ですか?
2022-08-10 04:26:26
質問
非常に間抜けな方法を紹介します。
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
私が得たい結果はこれと似ていますが、私はよりスマートなアルゴリズムが欲しいです(これはあまりにも遅くて間抜けです :-)。
素因数とその倍率は十分高速に求めることができる。 この方法で因子を生成するジェネレータがある。
(因子1, 多重性1)
(因子2, 多重性2)
(因子3, 多重性3)
などなど...
の出力は、すなわち
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
UPDATEです。 Greg Hewgillと彼のquot;smart way"に感謝します:) 100000000 のすべての約数を計算するのに、私のマシンでは馬鹿げた方法で 39 秒かかったのに対して、彼の方法では 0.01 秒で済みました。
UPDATE 2: の重複というのはやめてください。 この の投稿です。与えられた数の約数を計算するのは、すべての約数を計算する必要はない。それは別の問題です、あなたがそうでないと思うなら、wikipediaで"除数関数"を探してみてください。投稿する前に質問と回答を読んでください。もしトピックが何であるか理解できない場合は、役に立たない回答や既に与えられた回答を追加しないでください。
どのように解決するのですか?
あなたの
factorGenerator
関数がある場合、ここで
divisorGen
で、これは動作するはずです。
def divisorGen(n):
factors = list(factorGenerator(n))
nfactors = len(factors)
f = [0] * nfactors
while True:
yield reduce(lambda x, y: x*y, [factors[x][0]**f[x] for x in range(nfactors)], 1)
i = 0
while True:
f[i] += 1
if f[i] <= factors[i][1]:
break
f[i] = 0
i += 1
if i >= nfactors:
return
このアルゴリズムの全体的な効率は、完全に
factorGenerator
.
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 与えられた数の除数の数を計算するアルゴリズム
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Pythonでファイルの読み込みと上書きをする