Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

mod Pにおける平方根

x^2=a \pmod p
を求めるアルゴリズムとその原理の紹介です。アルゴリズムについては
mod pでの平方根
に書いてあるものと基本的に同じです。
任意の素数pに対して

a^{\frac{p-1}{2}} = \pm 1\pmod p

が成立しその符号はaが平方剰余かどうかで決まります。今回二乗してaになる数を探すのでaは必ず平方剰余です。つまり上式の値は1です。この式の両辺にさらにaを乗ずると

a^{\frac{p+1}{2}} = a\pmod p

よって\frac{p+1}{2}が偶数なら

(a^{\frac{p+1}{4}})^2 = a\pmod p

よって

a^{\frac{p+1}{4}}
が解になります。これはp4N+3型の素数のときに使えます。簡単ですね。
 
例)
p=31として、2の平方根を求めてみる。
2^{15}=1\pmod{p}
だから両辺に2を乗じて
2^{16}=2\pmod{p}
を得る。よって2^8が平方根になる。実際に計算してみると
2^8=8\pmod{p}であるから8が2の平方根である。実際8^2=2\pmod{p}である。
 
そうではないとき(つまりp4N+1型の素数のとき)は次のように考えます。

a^{\frac{p-1}{4}}=\pm 1 \pmod{p}

です。ここから両辺にaを乗ずると

a^{\frac{p+3}{4}}=\pm a \pmod{p}

よってp8N+5型の素数ならば

\pm (a^{\frac{p+3}{8}})^2= a \pmod{p}
符号が正の場合はa^{\frac{p+3}{8}}が解になります。

負の場合は4N+1型の素数は-1が平方剰余であるのであらかじめ-1の根号(x^2=-1となる数。仮にiと記述する)を求めておけば ia^{\frac{p+3}{8}}が解になります。

iは平方非剰余の数を(p-1)/4すれば見つかります。1\cdots p-1なる数のうち半数が平方剰余で半数が平方非剰余ですから2から順番に探索していけば高確率ですぐ見つかりますが8N+5型については2が常に平方非剰余ですので2^{(p-1)/4}をあらかじめ計算しておけば良いことになります。
 
例)
p=101として5の平方根を求める。
5^{(101+3)/8}=56\pmod{p}
である。よって56が平方根の可能性がある。実際計算をしてみると
56^2=5\pmod{p}
であるから56が5の平方根である。
 
同じくp=101として6の平方根を求める。
6^{(101+3)/8}=14\pmod{p}
である。よって14が平方根の可能性がある。実際計算をしてみると
14^2=95=-6\pmod{p}
である。そこで二乗して-1になる数を探す。2からチェックをしていくと
2^{25}=10\pmod{p}
である。実際
10^2=-1\pmod{p}
だから10は-1の平方根。これより
14\times 10=39\pmod{p}
を得、39が6の平方根であることがわかる。

最後に残ったケース、p8N+1型の素数についてはちょっとややこしいので次のエントリーに書きます。
Posted by issei

カテゴリ : 数学