2010-12-20 7 views
11

多数の素数が素数であるかどうかをテストするために、実際に使用できる高速で決定論的な方法を提案できますか?最速素数性テスト

また、非決定的素数検査を正しく使用する方法を知りたいと思います。たとえば、私がそのようなメソッドを使用している場合、出力が「いいえ」の場合は数字が素数ではないことがわかりますが、出力が「おそらく」の場合はどうなりますか?この場合、素数を手動でテストする必要がありますか?

ありがとうございます。

+2

CSに関するこの質問の回答とコメントには、いつ、どのような方法を選択するかについての良い洞察があります。理由は次のとおりです。https://cs.stackexchange.com/questions/23260/when-is-the-aks-primalityテストよりも実際に速い他のテスト –

答えて

6

私が知る素数検査のための決定論的多項式時間アルゴリズムは、AKS素数検査(http://en.wikipedia.org/wiki/AKS_primality_test)です。しかし、素早く成功する可能性が非常に高い非常に良い無作為化素数検定がたくさんあります。彼らは通常、数字が指数関数的に良い確率で合成されているかどうかを調べることによって動作するので、数字がコンポジットであると報告するか、非常に信頼できる「多分」と言う必要があります。

+1

「非常に信頼できる」と言うとき、システムの誤動作のために誤った出力を得る確率は、アルゴリズムが間違って生成する確率よりも高い回答? :-) –

+1

@Grigory使用しているアルゴリズムによって異なります。いくつかはあなたのチャンスを指定することさえ許可します。テスト~50%、75%、90%など彼が指定したAKSは、正しくコーディングされていると仮定して、正確に100%の時間に答えます。 –

+0

@Grigory: "system malfunction"? 「正しい」アルゴリズムが遅くなる可能性があるため、確率は正解の確率が99.9%となるように、より小さい値のセットを確認することができるため、確率が関係します。あなたが使用した*非決定的な用語は何を意味すると思いますか? – ruslik

6

"おそらく"実際には1-εを意味し、εは必要なだけ小さくなります。

ほとんどのアプリケーションでは、確率を、例えば、暗号アプリケーションで

  • 、幸いと秘密を推測攻撃、例えば、それに失敗するいくつかの小さなまだ非ゼロの確率が素数判定に接続されていない持って 2 ^( - 100)

  • ハードウェア障害(放射線)ランダムにコンピュータのメモリの一部のビットを反転(多分あなたの「決定論」素数判定の出力を保持しているものを

  • バグ(不具合の他のタイプよりも実際に、多くの可能性)

だから大きさのその順番にεを押すと、実際には十分でしょう。

たとえば、OpenSSL、GnuPGは非決定的素数テストのみを使用します。 「おそらく、あなたは決定的なテストを本当に望んでいない。しかし、あなたが利用できるものを確認してください:手元に図書館があり、それが十分に実行されていれば、それを使ってください。

2

ランダムプライムをRSAキーで使用する場合は、まず確率テストを使用する必要があります。確率があなたのニーズに十分に高い場合は、そこで停止します。あなたが確かなものでなければならない場合は、大規模な確率の高い素数を見つけたら、AKSなどの確率的でないテストでそれを検証します。これにより、素数以外の素数を素早くチェックすることができます。

特定の既存の番号がプライムであることを確認しようとする場合は、確実に答えているテストの1つを使用する必要があります。他の非多項式時間テストもありますが、実際には最も速いものを使用してください。

関連する問題