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

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


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} \ cdot \ cdot \ cdot 2} {K \、times}} $$

つまり、 n-1 を計算するのではなく (mod n)1つのステップで、k+1ステップで実行できます。 k + 1を使用する利点は、平方根ステップの各ステップを実装できることです。平方根テストが失敗すると、停止してnを合成数として宣言できます。

各ステップで、フェルマーの素数テストに合格し、アクセス可能な場合(結果が1の場合)、隣接するステップのすべてのグループ間で平方根テストが満たされることを提供できます。

初期化

  • ベースaを選択し、$ \ mathrm {T \、=\、a ^ {m}} $を計算できます。ここで、$ \ mathrm {m \、=\、\ frac {n-1} {2 ^ {k }}} $

  • Tが+1または-1の場合、nが強い擬素数であることを宣言して停止します。 Tが+-1の場合、Tは次のステップで1になり、フェルマーテストに合格するまで1のままになるためです。さらに、Tは次のステップで1になる可能性があり、1の平方根(次のステップで)は+ -1であるため、Tは平方根テストに合格しています。

  • Tがそれ以外の場合、nが素数なのか合成数なのかわからないため、次のステップに進むことができます。

ステップ1 :Tを二乗します

  • 結果が+1の場合、後続のテストではTが1のままであるため、フェルマーテストに合格することが確実にわかります。平方根テストに合格していません。このステップではTが1であり、前のステップでは+ -1以外であったため、nをコンポジットとして宣言して停止できます。

  • 結果が-1の場合、nは最終的にフェルマー検定に合格することがわかります。また、このステップではTが-1であり、次のステップで1になるため、平方根検定に合格することも理解できます。 nをstrongpseudoprimeとして宣言し、停止することができます。

  • Tが他の何かである場合、それが素数を持っているかどうかはわかりません。次のステップに進みます。

ステップ2からステップK– 1:

このステップとそれに続くすべてのステップは、ステップ2まで、およびステップK-1がステップ1と等しくなるまで継続します。

ステップK:

この手順は必要ありません。それがこのステップに到達でき、決定を下さなかった場合、このステップは私たちに提供しません。このステップの結果が1の場合、フェルマー検定は受け入れられますが、前のステップの結果が+ -1でないため、平方根検定は受け入れられません。ステップk-1の後、まだ停止していない場合は、nが複合であると宣言できます。ステップ0からステップK-1までに必要なミラーラビン素検定。


  1. Cトークンとは何ですか?

    Cプログラムは命令のコレクションであり、各命令は個々のユニットのコレクションです。 Cプログラムのすべての小さな個々のユニットは一般にトークンと呼ばれ、Cプログラムのすべての命令はトークンのコレクションです。 トークンはCプログラムを構築するために使用され、Cプログラムの基本的な構成要素とも言われています。 Cプログラムでは、トークンには次のものが含まれます- キーワード 識別子 オペレーター 特別な記号 定数 文字列 データ値 Cプログラムでは、これらすべてのキーワード、識別子、演算子、特殊記号、定数、文字列、およびデータ値の集合をトークンと呼びます。 例 以下は、大文字のアル

  2. C#のコメントは何ですか?

    コメントはコードの説明に使用されます。コンパイラはコメントエントリを無視します。 C#プログラムの複数行コメントは、以下に示すように/ *で始まり、文字*/で終わります。 複数行のコメント /* The following is a mult-line comment In C# /* /*...*/はコンパイラによって無視され、プログラムにコメントを追加するために配置されます。 1行のコメント // variable int a = 10; 以下は、単一行コメントと複数行コメントを追加する方法を示すサンプルC#プログラムです- 例 using System; namespace Dem