アルゴリズムが間違った答えを出す反例から始めましょう。つまり、は合成ですが、アルゴリズムは素数であると結論付けます。およびと仮定します。次になのでは小切手に合格してQRになります。また、およびなので、2番目のテストに合格すると、アルゴリズムは91が素数であると結論付けます。ただし、91は素数ではありません:。したがって、この場合、アルゴリズムは誤った結論を導き出しました。これは、アルゴリズムが少なくともいくつかのケースで不正解を出力できることを示しています。NNN = 91 、A = 9 (N - 1 )/ 2 = 9 45 ≡ 1N=91a=9(mod91 )A (N + 1 )/ 4 = 9 23 ≡ 81a(N−1)/2=945≡1(mod91)a(mod91 )81 2 ≡ 9a(N+1)/4=923≡81(mod91)(mod91 )91 = 7 × 13812≡9(mod91)91=7×13
実際、アルゴリズムにはもっと深刻な問題があります。アルゴリズムが「コンポジット」を出力する番号はありません。数字はすべて素数だと思います。より正確には、ごとに、アルゴリズムは永遠にループするか(QRテストに合格する数値を見つけようとして無駄に)、終了して「プライム」を出力します。したがって、アルゴリズムは、可能な限り間違っています。N NNN
これは、いくつかの数論を適用することで確認できます。がQR かどうかテストと、平方根の洞察に基づく2番目のテストがあります。場合は最初のテストに合格し、それは第二のものを通過します。a aaa
これが理由です。あれば QRテストは成功です。場合、2番目のテストは成功します。後者はと同等です。しかしです。したがって、場合、(両側に掛けると)。(N - 1 )/ 2 ≡ 1(modN )((N + 1 )/ 4)2 ≡ Aa(N−1)/2≡1(modN)(modN )(N + 1 )/ 2 ≡ A(a(N+1)/4)2≡a(modN)(modN )(N + 1 )/ 2 ≡ A × A (N - 1 )/ 2a(N+1)/2≡a(modN)(modN )(N - 1 )/ 2 ≡ 1a(N+1)/2≡a×a(N−1)/2(modN)(modN )A (N + 1 )/ 2 ≡ Aa(N−1)/2≡1(modN)a(modN )a(N+1)/2≡a(modN)
アルゴリズムのパスのそれぞれは、基本的に、最初のテストに合格するを探し、それが2番目のテストに合格するかどうかをチェックすることになりますが、以前の洞察に基づいて、最初のテストに合格したすべての 2番目のテストにも合格することが保証されています。したがって、QRテストに合格する値がアルゴリズムで検出されると、2番目のテストは自動的に合格し、アルゴリズムは「素数」を出力します。k a a akaaa
学ぶべき教訓:有望に見えるアルゴリズムがあると思うときはいつでも、それをコード化し、いくつかのテストケースで試してみて、うまく機能するかどうかを確認することは価値があります。いくつかのテストケースでそれを試すことは、正当性の証明の代わりにはなりませんが、不正なアルゴリズムをすばやく除外するのに役立つ方法です。
最後に、あなたの本当の質問に:このようなものを使用して素数性テストを構築できますか?まあ、ミラーラビン素数検定は、このようなものに大まかに基づいていると考えることができます。これらは、が素数である場合、の平方根がどのように見えるかという特性に基づいています。あなたはの平方根発生した場合はではないまたは、あなたは、と結論付けることができます素数でないです。ただし、これは形式の数値に限定されないため、その意味では明らかに異なります。1 N 1 1 − 1 N N N = 4 k + 31N11−1NNN=4k+3