平方根関数を使用しての形式の素数性をテストするための効率的なアルゴリズムはありますか?


8

私が読んでいたCLRSを、それがあればことを示すように求めフォームの素数である及び平方剰余した後、の平方根である(一方は容易ことを示すことができますは平方根です)。p p4 k + 3 4k+3a aa k + 1ak+1 a kak

以前の事実を使用していて、(必ずしも素数である必要はない)の形式の数があることを知っているかどうか疑問に思っていたので、平方根関数を使用して(何か?)異なる素数性テストがあるかもしれません(つまり、)。N = 4 k + 3 N=4k+3N NS Q R T Na = a k + 1SQRTN(a)=ak+1

だから私が考えたアルゴリズムは次のとおりです:

二次残差(QR)(a ^ {\ frac {p-1} {2}} \ equiv 1 \ pmod pが成り立つかどうかを確認することでこれを簡単に行うことができます)。QRを取得したら、a ^ {k + 1} = x_aを計算しx_a ^ 2aに等しいかどうかを確認ます。真の場合、aは素数であると結論付けます。それ以外の場合は、別のQR a '\ in \ mathbb {Z} ^ * _ Nを選択してアルゴリズムを繰り返します。このアルゴリズムをk回繰り返すことができます。k回経過しても成功しない場合は、数値は複合であると結論付けます。Z * NaZNap121(modp)ap121(modp)ak+1=xaak+1=xax2ax2aaaaaaZNaZNkkkk

私は、なぜそれが正しいのか、しかし正式な証明ではないのかについて、主に直感を持っています。xa=ak+1xa=ak+1は、ppが素数のときの平方根であるという最初の事実から、x_a ^ 2 \ equiv a \ pmod pであることを意味する必要がありx2aa(modp)x2aa(modp)ます。したがって、aaがQRの場合そのチェックはパスします(QRを選択するのは半分の時間であるため、おそらく非QRを選択するのは1/2だけです)。

ただし、NNが合成の場合、x_a ^ 2 \ equiv a \ pmod Nであるという保証はないようx2aa(modN)x2aa(modN)です。だからそれが成り立たないなら、私たちはそれが素数でないと確信しています。しかし、もしそれが成り立つなら、その素数が正しければ、私たちのコンポジットが間違っているかもしれません。基本的に、N = 4k + 3のときにSQRT関数を使用して、Nが素数であるかN=4k+3N=4k+3どうかを判断できますか?NN


独自の質問に値する別のアルゴリズムについても考えました。ある数の平方根を計算し、2を超える根を持つことは素数性を決定するための信頼できる方法ですか?


@カイル・ジョーンズ、あなたがあなたの答えを復元する(元に戻す)ことをいとわないかもしれませんか?私はそれが素晴らしい洞察力を持っていると思います-私は一見それをかなり感謝しませんでしたが、さらに詳しく調べると、それは良い例だと思います。
DW

@DW OK。あなたのより包括的な答えを考えると、それほど価値があるとは思いませんでしたが、価値があると思われる場合は、それを持ち帰ります。
Kyle Jones

Miller-Rabinをレビューした後、私は新しいアイデアを得ました。私が新しく提案したアルゴリズムについてどう思いますか?@KyleJones
チャーリーパーカー、

@CharlieParker新しい質問がある場合は、別の投稿で質問してください。この質問を編集して既存の回答を無効にすると、質問と回答のリポジトリを持つ目的が損なわれます。
カイル・ジョーンズ、

@KyleJonesは、同じトピックについて本当に決めるので、決めるのが難しいです。何を指示してるんですか?新しい質問を開くことができますが、それが適切かどうかはわかりませんでした。
チャーリーパーカー

回答:


5

アルゴリズムが間違った答えを出す反例から始めましょう。つまり、は合成ですが、アルゴリズムは素数であると結論付けます。およびと仮定します。次になのでは小切手に合格してQRになります。また、およびなので、2番目のテストに合格すると、アルゴリズムは91が素数であると結論付けます。ただし、91は素数ではありません:。したがって、この場合、アルゴリズムは誤った結論を導き出しました。これは、アルゴリズムが少なくともいくつかのケースで不正解を出力できることを示しています。NNN = 91 、A = 9 N - 1 / 2 = 9 451N=91a=9mod91 A N + 1 / 4 = 9 2381a(N1)/2=9451(mod91)amod91 81 29a(N+1)/4=92381(mod91)mod91 91 = 7 × 138129(mod91)91=7×13


実際、アルゴリズムにはもっと深刻な問題があります。アルゴリズムが「コンポジット」を出力する番号はありません。数字はすべて素数だと思います。より正確には、ごとに、アルゴリズムは永遠にループするか(QRテストに合格する数値を見つけようとして無駄に)、終了して「プライム」を出力します。したがって、アルゴリズムは、可能な限り間違っています。N NNN

これは、いくつかの数論を適用することで確認できます。がQR かどうかテストと、平方根の洞察に基づく2番目のテストがあります。場合は最初のテストに合格し、それは第二のものを通過します。a aaa

これが理由です。あれば QRテストは成功です。場合、2番目のテストは成功します。後者はと同等です。しかしです。したがって、場合、(両側に掛けると)。N - 1 / 21modN N + 1 / 42Aa(N1)/21(modN)modN N + 1 / 2A(a(N+1)/4)2a(modN)modN N + 1 / 2A × A N - 1 / 2a(N+1)/2a(modN)modN N - 1 / 21a(N+1)/2a×a(N1)/2(modN)modN A N + 1 / 2Aa(N1)/21(modN)amodN a(N+1)/2a(modN)

アルゴリズムのパスのそれぞれは、基本的に、最初のテストに合格するを探し、それが2番目のテストに合格するかどうかをチェックすることになりますが、以前の洞察に基づいて、最初のテストに合格したすべての 2番目のテストにも合格することが保証されています。したがって、QRテストに合格する値がアルゴリズムで検出されると、2番目のテストは自動的に合格し、アルゴリズムは「素数」を出力します。k a a akaaa

学ぶべき教訓:有望に見えるアルゴリズムがあると思うときはいつでも、それをコード化し、いくつかのテストケースで試してみて、うまく機能するかどうかを確認することは価値があります。いくつかのテストケースでそれを試すことは、正当性の証明の代わりにはなりませんが、不正なアルゴリズムをすばやく除外するのに役立つ方法です。


最後に、あなたの本当の質問に:このようなものを使用して素数性テストを構築できますか?まあ、ミラーラビン素数検定は、このようなものに大まかに基づいていると考えることができます。これらは、が素数である場合、の平方根がどのように見えるかという特性に基づいています。あなたはの平方根発生した場合はではないまたは、あなたは、と結論付けることができます素数でないです。ただし、これは形式の数値に限定されないため、その意味では明らかに異なります。1 N 1 1 1 N N N = 4 k + 31N111NNN=4k+3


Miller-Rabinをレビューした後、私は新しいアイデアを得ました。私が新しく提案したアルゴリズムについてどう思いますか?
チャーリーパーカー、

1
@CharlieParkerでは、既存の回答を無効にするような方法で質問を編集するのではなく、通常、新しい質問をすることをお勧めします。そうすることをお勧めします。(ヒント:sqrtの計算方法を考えてください...)
DW

3

合同性は正しい形式のすべての素数に当てはまりますが、一部の合成数にも当てはまるため、合同性だけでは素数性検定としては役に立たなくなります。pp

例:を数値設定します。これは明らかに複合であり、での形式です。 はなので、 modは2次残差 =ます。 = = ; これにmodを適用するとます。ここでのテスト:modの下では、は、が素数である場合にのみ()の平方根と見なされますが、P 15 4 K + 3 、K = 3 10000 100 2 10000 15 10 10 K + 1 10 4 10000 P 10 、P 10 10 、P 10 2 100 10 P P Pp154k+3k=31000010021000015a1010k+110410000p10p 10a10p102 =は modなので、はprimailtyテストに合格しています。しかし、が複合であることはわかっています。10010ppp

これは、QRを選択するための方法が完璧であっても、アルゴリズムがまだ失敗する可能性があることを示しています。例えば、ここで選択する合理的な方法だろう:乱数選ぶ、それは、正方形、およびコール(すなわち、結果を)。そうすれば、がQRであることが保証され、リストしたテストを使用してテストする必要がないことがわかります。それがアルゴリズムがを選択し方法である場合、上記の例は、アルゴリズムがいくつかのケースで間違った答えを与える可能性があることを示しています(たとえば、、)。a r a a = r 2 mod N a a p = 15 r = 5araa=r2modNaap=15r=5


計算のどこかにエラーがあるのか​​、提案されたアルゴリズムを誤解しているのではないかと思います。 はQRテストに合格しません:、ではありません。したがって、提案されたアルゴリズムについての私の理解によれば、はQRとして受け入れられず、アルゴリズムはそれを使用してそれ以上の計算を試みません。アルゴリズムが受け入れ可能なQRを見つける方法はランダムに選択しかどうかをテストすることだと想定しています。それはテキストが示唆しているようです。A = 10 N - 1 / 2 = 10 710a=10mod15 1 、A = 10 A N - 1 / 21a(N1)/2=10710(mod15)1a=10amodN a(N1)/21(modN)
DW

@DW OK。とにかくあなたの答えは完全に良くなります。
Kyle Jones

1
ああ、少し詳しく見てみると、何が起こっているのかわかります。10は確かにQRですが、チェック誤ってQRではないと考えています。方法は、アルゴリズムは、乱数選択するとして働いていたのであれば、、それは、正方形、およびコール結果(すなわち、)、その後、あなたの答えは、有効な反例だろう-それはありません提案されたアルゴリズムの不合理な解釈。クールでいい答えです!a N 1 / 2 = 1modN)a(N1)/2=1(modN)rraaa=r2modNa=r2modN
DW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.