概念 オイラーは [ 2 ] 任意の奇素数 p と任意の整数a に対して、
1 ( p − 1 ) / 2 ≡ ( 1 p ) ( モジュール p ) {\displaystyle a^{(p-1)/2}\equiv \left({\frac {a}{p}}\right){\pmod {p}}} どこ( 1 p ) {\displaystyle \left({\tfrac {a}{p}}\right)} はルジャンドル記号 です。ヤコビ記号 はルジャンドル記号を一般化したものです。( 1 n ) {\displaystyle \left({\tfrac {a}{n}}\right)} ここで、n は任意の奇数です。ヤコビ記号は、ヤコビによる 二次相互法則の一般化を用いて、 O ((log n )²) の時間で計算できます。
奇数n が与えられた場合、合同式が成り立つかどうかを考察することができる。
1 ( n − 1 ) / 2 ≡ ( 1 n ) ( モジュール n ) {\displaystyle a^{(n-1)/2}\equiv \left({\frac {a}{n}}\right){\pmod {n}}} 基底a のさまざまな値に対して、a が n と互いに素で あるという条件の下で、この合同式が成り立ちます。nが素数であれば、この合同式はすべての a に対して成り立ちます。したがって、 a の値をランダムに選択して合同式をテストすると、合同式に合わないa が見つかった時点で、nが素数ではないことがわかります (ただし、これは n の非自明な因数分解を示すものではありません)。この基底aは n のオイラー証拠 と呼ばれ、 n が合成数であることの証拠となります。nが 合成数であるにもかかわらず合同式が成り立つ場合、基底aは n のオイラー嘘つき と呼ばれます。
任意の奇数n に対して、すべての塩基の少なくとも半分
1 ∈ ( Z / n Z ) * {\displaystyle a\in (\mathbb {Z} /n\mathbb {Z} )^{*}} オイラーの嘘つきの集合は (オイラー) 証人であり、オイラーの嘘つきの集合は、( Z / n Z ) * {\displaystyle (\mathbb {Z} /n\mathbb {Z} )^{*}} 例えば、n = 65 {\displaystyle n=65} オイラーの嘘つきの集合は8次であり、= { 1 、 8 、 14 、 18 、 47 、 51 、 57 、 64 } {\displaystyle =\{1,8,14,18,47,51,57,64\}} 、 そして( Z / n Z ) * {\displaystyle (\mathbb {Z} /n\mathbb {Z} )^{*}} 注文番号は48です。
これは、フェルマー素数判定法 とは対照的である。フェルマー素数判定法では、証拠となる数の割合がはるかに小さくなる可能性がある。したがって、フェルマー素数判定法におけるカーマイケル数 の場合とは異なり、多くの証拠となる数を持たない(奇数の)合成数nは存在しない。
例 n = 221 が素数かどうかを判定したいとします。( n − 1)/2 = 110 と書きます。
ランダムにa (1 より大きく n より小さい)を選択します。47 です。バイナリべき乗 などの効率的な方法を使用して、数値を (mod n ) でべき乗し、計算します。
a ( n − 1)/2 mod n = 47 110 mod 221 = − 1 mod 221( 1 n ) モジュール n = ( 47 221 ) モジュール 2 21 = − 1 モジュール 2 21 {\displaystyle \left({\tfrac {a}{n}}\right){\bmod {n}}=\left({\tfrac {47}{221}}\right){\bmod {2}}21=-1{\bmod {2}}21} これは、221が素数であるか、47が221に対するオイラーの嘘であることを意味します。別のランダムなaを 試してみましょう。今回はa = 2 を選択します。
a ( n − 1)/2 mod n = 2 110 mod 221 = 30 mod 221( 1 n ) モジュール n = ( 2 221 ) モジュール 2 21 = − 1 モジュール 2 21 {\displaystyle \left({\tfrac {a}{n}}\right){\bmod {n}}=\left({\tfrac {2}{221}}\right){\bmod {2}}21=-1{\bmod {2}}21} 。したがって、2は221が合成数であることのオイラー的証拠であり、47は実際にはオイラー的嘘つきであった。ただし、これは221の素因数(実際には13と17)については何も教えてくれないことに注意されたい。
アルゴリズムと実行時間 このアルゴリズムは、擬似コード で以下のように記述できます。
入力 : n 、素数判定を行う値 k 、 判定 の精度を決定するパラメータ 出力 : n が合成数の場合はcomposite 、それ以外の場合はおそらく素数 k回 繰り返す :[2, n − 1] の範囲からランダムに1 を 選択します。x ← ( 1 n ) {\displaystyle x\gets \left({\tfrac {a}{n}}\right)} x = 0または 1 ( n − 1 ) / 2 ≢ x ( モジュール n ) {\displaystyle a^{(n-1)/2}\not \equiv x{\pmod {n}}} 合成数 を返し たら、 おそらく素数 を返した モジュラべき乗 の高速アルゴリズムを使用すると、このアルゴリズムの実行時間は O( k ·log 3 n ) になります。ここで、k はテストされるa の異なる値の数です。
テストの精度 アルゴリズムが誤った答えを返す可能性はあります。入力「n」が実際に素数であれば、出力は常に正しく「おそらく素数」となります 。
n が奇数かつ合成数の場合、 gcd( a , n ) = 1となるすべてのa の少なくとも半分はオイラーの証人である。これを次のように証明できる。{a1, a2, ..., am}をオイラーの嘘つきとし、 a を オイラーの 証人と する。すると、i = 1, 2 , ..., m に対して、次の ようになる。
( 1 ⋅ 1 私 ) ( n − 1 ) / 2 = 1 ( n − 1 ) / 2 ⋅ 1 私 ( n − 1 ) / 2 = 1 ( n − 1 ) / 2 ⋅ ( 1 私 n ) ≢ ( 1 n ) ( 1 私 n ) ( モジュール n ) 。 {\displaystyle (a\cdot a_{i})^{(n-1)/2}=a^{(n-1)/2}\cdot a_{i}^{(n-1)/2}=a^{(n-1)/2}\cdot \left({\frac {a_{i}}{n}}\right)\not \equiv \left({\frac {a}{n}}\right)\left({\frac {a_{i}}{n}}\right){\pmod {n}}.} なぜなら、以下のことが成り立つからである。
( 1 n ) ( 1 私 n ) = ( 1 ⋅ 1 私 n ) 、 {\displaystyle \left({\frac {a}{n}}\right)\left({\frac {a_{i}}{n}}\right)=\left({\frac {a\cdot a_{i}}{n}}\right),} 今私たちは知っている
( 1 ⋅ 1 私 ) ( n − 1 ) / 2 ≢ ( 1 ⋅ 1 私 n ) ( モジュール n ) 。 {\displaystyle (a\cdot a_{i})^{(n-1)/2}\not \equiv \left({\frac {a\cdot a_{i}}{n}}\right){\pmod {n}}.} これにより、各a i は 、オイラーの証拠でもある数a · a i を与えることがわかります。したがって、各オイラーの嘘つきはオイラーの証拠を与え、オイラーの証拠の数はオイラーの嘘つきの数以上になります。したがって、n が 合成数の場合、 gcd( a , n ) = 1 を満たすすべてのa の少なくとも半分はオイラーの証拠です。
したがって、失敗の確率は最大で 2 − k です (ミラー-ラビン素数判定 の失敗の確率は最大で 4 − k です)。
暗号化 の目的においては、テスト する基底の数が多いほど、つまりk の値が十分に大きいほど、テストの精度は向上します。したがって、この方法でアルゴリズムが失敗する可能性は非常に小さいため、(擬似)素数は暗号化アプリケーションで実際に使用されますが、素数を持つことが重要なアプリケーションでは、素数性を証明する ECPP やポックリントン素数判定法 [ 3 ] のようなテストを使用する必要があります。
平均的なケースの挙動 Solovay–Strassenテストの1ラウンドのエラー確率の上限1/2は任意の入力nに対して成り立つが、上限が(近似的に)達成される nの 値は極めてまれである。平均的には、アルゴリズムのエラー確率は大幅に小さく、1/2未満である。
2 − k exp ( − ( 1 + o ( 1 ) ) ログ x ログ ログ ログ x ログ ログ x ) {\displaystyle 2^{-k}\exp \left(-(1+o(1)){\frac {\log x\,\log \log \log x}{\log \log x}}\right)} k 回のテストに対して、一様乱数n ≤ x に適用される。[ 4 ] [ 5 ] 同じ境界は、k 回のテストで素数と宣言された乱数n ≤ x に対して、 n が合成数である条件付き確率は何かという関連問題にも適用される。
参考文献 ↑ Artjuhov, MM (1966–1967)、「小フェルマーの定理に関連する数の素数性に関するいくつかの基準」、Acta Arithmetica 、12 :355–364 、MR 0213289 ↑ オイラーの基準 ↑ Mathworldのポックリントンテスト ↑ P. Erdős; C. Pomerance (1986). "合成数に対する偽証者の数について". Mathematics of Computation . 46 (173): 259–279 . doi : 10.2307/2008231 . JSTOR 2008231 . ↑ I. Damgård; P. Landrock; C. Pomerance (1993). "Average case error estimates for the strong probable prime test". Mathematics of Computation . 61 (203): 177– 194. doi : 10.2307/2152945 . JSTOR 2152945 . ↑ R. Motwani; P. Raghavan (1995). Randomized Algorithms . Cambridge University Press. pp. 417–423 . ISBN 978-0-521-47465-8 。
さらに読む Solovay, Robert M.; Strassen, Volker (1977). "素数判定のための高速モンテカルロテスト". SIAM Journal on Computing . 6 (1): 84–85 . doi : 10.1137/0206006 . Solovay, Robert M.、Strassen, Volker (1978)「正誤表:素数判定のための高速モンテカルロテスト」 SIAM Journal on Computing 7 ( 1): 118. doi : 10.1137/0207009 も参照。 ディーツフェルビンガー、マーティン(2004年6月29日)「多項式時間での素数判定、ランダム化アルゴリズムから「PRIMES Is in P」まで」 「.コンピュータサイエンス講義ノート . 第 3000巻. Springer. ISBN 978-3-540-40344-9 。
外部リンク Solovay-Strassen法によるMapleでの素数判定の実装