ミラー=ラビン素数判定法
実用的に十分速い素数判定法
確率的素数判定法だが、誤判定確率を任意に小さくできる
誤判定確率を小さくするには速度を犠牲にする
速度の犠牲が線形なのに対して、誤判定確率は指数関数的に小さくできるので効率は良い
ミラー–ラビン素数判定法 | Wikipedia
元は未証明の拡張リーマン予想に基づく決定的アルゴリズム (ミラー素数判定法)だったが、M. Rabin が無条件の確率的アルゴリズムにした
フェルマー素数判定法や Solovay–Strassen 素数判定法と同様、ミラー=ラビン素数判定法も素数に関して成り立つ等式を用いて判定する
準備
$ p^nを$ \hat pで表すことにする。
特に$ \hat2は$ \hat2=4や$ \hat2=1024など複数の値を取りうる変数である事に注意。
考え方
$ (\Z/p\Z)^\times\ (p\in\mathbb P_{\ge3})の単位元の平方根について考える。
$ 1\overset p\equiv1^2
$ 1\overset p\equiv(-1)^2
コレは自明。
非自明な 1 の平方根
合成数を法とする乗法群には非自明な 1 の平方根が存在することがある。
$ 1\overset8\equiv3^2
$ 1\overset8\equiv5^2
$ 1\overset{12}\equiv5^2
$ 1\overset{15}\equiv4^2
合成数を法とする乗法群には非自明な 1 の平方根が存在しないこともある。
$ (\Z/4\Z)^\times=\lang1,3\rang=\lang1,-1\rang
$ (\Z/6\Z)^\times=\lang1,5\rang=\lang1,-1\rang
$ (\Z/9\Z)^\times=\lang1,2,4,8,7,5\rang
$ =\lang1,2,4,-1,-2,-4\rang
素数を法とする乗法群には非自明な 1 の平方根は存在しない
$ x\overset p\equiv 1とする
$ x^2-1\overset p\equiv0
$ (x-1)(x+1)\overset p\equiv0
これが成立するのは$ x-1か$ x+1が$ pの約数である場合
$ pは素数なので解は$ x=kp\pm1のみ
これは自明な 1 の平方根である。
ここで、奇素数$ p\in\mathbb P_{\ge3}について考える
$ p-1=\hat{\bm2}d\quad(d\in{\rm Odd})となる
すると任意の$ a\in(\Z/p\Z)^\timesにおいて以下が成立する
$ a^d\overset p\equiv1
または$ a^{\hat 2d}\overset p\equiv-1\quad(\exist \hat 2\le\hat{\bm2}/2)
証明
フェルマーの小定理より
$ a^{p-1}\overset p\equiv1
$ a^{p-1}=a^{\hat{\bm2}d}\overset p\equiv1
$ a^{\hat{\bm2}d}の平方根は$ -1か$ 1
$ a^{\hat 2d}=a^{\hat{\bm2}d/2}\quad(\hat2=\hat{\bm2}/2)とする
-1 の場合
$ a^{\hat2d}\overset p\equiv-1
1 の場合
$ a^{\hat2d}\overset p\equiv1
最初に戻ってコレの平方根が -1 か 1 になる
どこかで -1 として引っかかれば、以下が成立
$ a^{\hat2d}\overset p\equiv-1\qquad(\exist\hat2\le\hat{\bm2}/2)
最後まで 1 だった場合
$ a^d\overset p\equiv1
すべての場合分けをまとめると、任意の$ a\in(\Z/p\Z)^\timesにおいて
$ a^d\overset p\equiv1
または$ a^{\hat2d}\overset p\equiv-1\quad(\exist\hat2\le\hat{\bm2}/2)
この補題の対偶を取る
ある$ a\in(\Z/n\Z)^\timesにおいて以下の式が成立したら奇数$ n\in{\rm Odd}は合成数
$ \begin{cases}a^d\overset n{\not\equiv}1\\a^{\hat2d}\overset n{\equiv}1\quad(\forall\hat2\le\hat{\bm2}/2)\end{cases}
このとき、$ aは$ nが合成数である証人となる
$ nが合成数であるにも関わらず合同式が成立する$ aを強い嘘つき (strong liar) と呼ぶ
$ nを底$ aについての強擬素数 (strong pseudoprime) と呼ぶ
奇数の合成数$ nに対しては殆ど全ての$ aが証拠となるある。
上手く証人$ aを当てる方法は知られていないのでランダムにアタックする
殆どの$ aが証人なので高い確率で$ nが合成数であると検出できる
アルゴリズム
入力: $ n\in{\rm Odd}\quad(n\ge3),$ k\in\N: 判定の正確度を表すパラメータ
出力: $ nが合成数ならcomposite, さもなくば probably prime
動作
1. $ n-1=\hat{\bm2}dを満たす$ dを見つける
$ n-1の LSB を取れば良い
2. 以下を$ k回繰り返す
1. $ a\in[1, n-1]\subset\N を乱択する
2.$ a^d\overset n{\equiv}1なら$ kを更新してやり直す (continue)
3. $ a^{\hat 2d}\overset n{\not\equiv}-1\quad(\forall \hat2\le\hat{\bm2}/2)なら composite を返す
3. probably prime を返す
評価
平方の繰り返しを冪乗余を使って実現すると、実行時間は$ \Omicron(k\log^3n)となる
乗算を FFT ベースのものにすると$ \tilde\Omicron(k\log^2n)になる
強い嘘つきの$ aを引く確率を$ \varepsilonとすると、毎回独立な$ aを取ってくるなら正解率は$ 1-\varepsilon^kになる。
$ \varepsilon<\frac14らしい。
任意の奇数の合成数$ nについて、$ aの少なくとも 3/4 が合成性の証拠となることがわかっている。
ミラー=ラビン素数判定法における強い嘘つきの集合は Solovay–Strassen 素数判定法の強い嘘つきの部分集合で、多くの場合は真部分集合らしい
つまりミラー=ラビン素数判定法は Solovay–Strassen 素数判定法よりも強い手法
実際に誤判定確率が低い
ミラー=ラビン素数判定法の誤判定確率は$ <4^{-k}
Solovay–Strassen 素数判定法の誤判定確率は$ <2^{-k}
実際の誤判定確率は平均的には$ 4^{-k}よりはずっと小さい
暗号に利用する場合は最悪のケースを考えて$ 4^{-k}のみを信じるべきとのこと
$ aとして素数を小さい順に選んでいくと効率よく判定できる