プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

与えられた数の素数性をテストするためのミラーラビンアルゴリズムとは何ですか?


Miller Rabinは、多数の素数性をテストするための高速なアプローチです。このアルゴリズムはラビンミラー素数性テストと呼ばれ、このアルゴリズムは、フェルマーの素数性テストやソロベイ-シュトラッセンの素数性テストなどの他のテストと同じ数が素数であるかどうかを判断します。

このテストは、素数値に当てはまる同等性または同等性のグループに基づいているため、素数性をテストする必要があるかどうかをチェックします。

このアルゴリズムは、最も有用な既知の素数テストアルゴリズムであり、RSA暗号化に基づくさまざまなソフトウェアライブラリで使用でき、最適なインスタンスはOpenSSLです。

ミラーラビンは、数値が合成数であることを検証します。したがって、これは素数性テストではなく複合性テストと呼ばれます。ミラーラビン素検定は、すべての複合材料を識別します。合成数nごとに、少なくとも3/4(ミラーラビン)の数が存在する可能性があります。aはnの合成数の目撃者です。

ミラーラビンは、フェルマーの小定理の連想的に単純な拡張であり、フェルマーの小定理よりもはるかに高い確率で素数性をテストすることができます。

アルゴリズム :ミラーラビン検定の擬似コード-

Miller-Rabin-Test (n, a) // n is the number; a is the base
{
   Find m and k such that n − 1 = m x 2k
   T ← amod n
   If (T = ±1)return "a prime"
   for (i ← 1 to k − 1) // k – 1 is the maximum number of steps
   {
      T ← T2 mod n
      if (T = ±1) return "a composite"
      if (T = −1) return "a prime"
   }
   return "a composite"
}

ex i stsは、数値がミラーラビン検定に合格するたびに、それが素数ではない確率が1/4であることを証明します。数がm個のテストに合格した場合(m個の異なるパスを使用)、素数でない確率は(1/4) m です。 。

:2進数を使用してミラーラビンアルゴリズムを適用し、341が合成数であるかどうかをテストします。

解決策 :ミラーラビンアルゴリズムを使用して、次のように番号341をテストできます。

ステップ1:341 − 1 =2 2 x85。したがって、p =341、k=2およびq=85

ステップ2:x =2(与えられた)

ステップ3:S =x q mod p

=2 85 mod 341 =(2 10 )x 2 5 mod 341 8

=2 10 mod 341 x 2 13 mod 341

=1 x 8192 mod 341 =8192 mod 341

=8

ステップ4:8≠1なので、次のステップに進みます。

ステップ5:j =1の場合、S =x 2q mod p

=2 170 mod 341 =(2 20 8 x 2 10 mod 341

=2 20 mod 341 x 2 8 mod 341 x 2 10 mod 341

=1 x 256 x 1 =256

さて、=256≠1

結果は決定的ではありません

したがって、341は合成数ではありません。

利点

  • このアルゴリズムを使用して、多数の素数性をテストできます。

  • 他の素数性テストと比較した場合の速度の利点のため、ミラーラビンテストはいくつかの暗号化アプリケーションに最適なテストになります。

  • オイラーおよびソロベイ-シュトラッセンのテストと比較すると、ミラーラビンはより動的であり、本質的な側面は失敗の可能性が減少することです。

  • フェルマーの素数検定によると、すべてのカーマイケル数nに対して嘘つきが多すぎ、エラー確率は1に近く、この不利な点はミラーラビンで防止されています。


  1. ミラーラビン素数性テストの手順は何ですか?

    Miller-Rabin Permalityテストは、FermatテストとFermatルートテストを古典的な方法で組み合わせて、強い擬素数を見つけます。このテストでは、奇数のmと2の累乗の積としてn –1を書くことができます。 $$ \ mathrm {n-1 =m \、x \、2 ^ {k}} $$ ベースaのフェルマー検定は次のように構成できます。 $$ \ mathrm {a ^ {n-1} \、=\、a ^ {m \、x \、2k} =\ left [a ^ {m} \ right] ^ {2k} =\ left [a ^ {m} \ right] \ frac {2 ^ {2

  2. C++の数値の奇数桁の桁の合計の素数性テスト

    この問題では、数Nが与えられます。私たちのタスクは、数の奇数の桁の合計が素数を与えるかどうかを確認することです。 素数性テスト は、与えられた数が素数であるかどうかをチェックするために使用されるアルゴリズムです。 問題を理解するために例を見てみましょう Input: 3425 Output: No Explanation: sum digits at odd place = 5 + 4 = 9, which is not a prime number. この問題を解決する簡単な方法は、数値の奇数の場所にあるすべての数字を加算してから、この合計が素数であるかどうかを確認することです。 ソ