[解決済み] 数の素因数分解の最大値を求めるアルゴリズム
質問
ある数の最大の素因数を計算するには、どのような方法があるか?
最も効率的なのは次のようなものだろうと考えています。
- きれいに割り切れる最も小さい素数を探す
- 割り算の結果が素数かどうかのチェック
- そうでない場合、次に低いものを探す
- 2に進みます。
素因数が小さい方が計算しやすいという前提で考えています。この程度でよいのでしょうか?また、他にどのようなアプローチをとればよいでしょうか?
編集:今気づいたのですが、素因数が2つ以上ある場合、私のアプローチは無駄です。なぜなら、結果が他の2つの素数の積である場合、ステップ2は失敗するので、再帰的アルゴリズムが必要だからです。
再度編集します。なぜなら、最後に見つかった素数は最も大きいものでなければならないからです。したがって、ステップ2の素数でない結果をさらに検証すると、より小さい素数が得られることになります。
解決するには?
実は、大きな数の因数を求めるには、もっと効率的な方法がいくつかあります(小さな数の場合は、割り算の試行がそれなりに有効です)。
入力された数が平方根に非常に近い2つの因子を持つ場合、非常に高速な方法の1つは、次のように知られています。 フェルマー因数分解 . これは恒等式 N = (a + b)(a - b) = a^2 - b^2 を利用したもので、理解も実装も簡単です。残念ながら、一般にあまり高速ではありません。
長さ100桁までの数の因数分解で最もよく知られている方法は 二次ふるい . おまけに、このアルゴリズムの一部は、並列処理で簡単にできる。
さらにもう一つ、私が聞いたことのあるアルゴリズムが ポラードのRhoアルゴリズム . 一般に二次ふるいほど効率的ではありませんが、実装はより簡単なようです。
数を2つの因数に分割する方法が決まったら、私が思いつく限り、数の最大の素因数を求める最速のアルゴリズムを紹介します。
最初に数そのものを格納する優先キューを作成する。繰り返しごとに、キューから最も大きい数を取り出し、それを2つの因子に分割しようとする(もちろん、その因子の1つに1は許されない)。このステップに失敗した場合、その数は素数であり、答えが得られたことになります。そうでない場合は、2つの因子を行列に追加し、繰り返します。
関連
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] nからk個の要素の組み合わせをすべて返すアルゴリズム
-
[解決済み] 2次元の配列を回転させる方法は?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
-
[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
-
[解決済み] Breadth First Search (BFS)が同じことをより速くできるのに、なぜDijkstraのアルゴリズムを使うのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
operator=' にマッチしない等号の両端がマッチしない
-
[解決済み] クレジットカードの番号からカードの種類を判別する方法は?
-
[解決済み] Googleの "Did you mean? "はどうなっているのか?アルゴリズムの仕組みとは?[クローズド]
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] 一意な(繰り返しのない)乱数をO(1)で?
-
[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
-
[解決済み] 2つのキューを使用したスタックの実装
-
[解決済み] 並列ソートアルゴリズムの中で、最も平均的な場合分け性能を持つのはどれか?
-
[解決済み] 短い文字列のための効率的な圧縮アルゴリズム[closed]。
-
[解決済み] 光の周波数をRGBに変換する?