Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js
メニュー
ホーム
アーカイブ
元祖ワシ的日記
ほぼ雑記的メモ
←宇都宮ライトレール
mod Pにおける平方根 その2→
mod Pにおける平方根
2023年10月23日(月)
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}}
が解になります。これは
p
が
4N+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}
である。
そうではないとき(つまり
p
が
4N+1
型の素数のとき)は次のように考えます。
a^{\frac{p-1}{4}}=\pm 1 \pmod{p}
です。ここから両辺に
a
を乗ずると
a^{\frac{p+3}{4}}=\pm a \pmod{p}
よって
p
が
8N+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の平方根であることがわかる。
最後に残ったケース、
p
が
8N+1
型の素数についてはちょっとややこしいので次のエントリーに書きます。
Tweet
エントリにコメントする
エントリにコメントする
タイトル
名前
コメント
完了
コメントが表示されるまで時間がかかることがあります。
最近のエントリ
北陸新幹線を乗ってきた
西九州新幹線を乗ってました
freebsd-update で出るエラーメッセージ
FreeBSDのswapファイルがうまく作成できなかったので調べてみた
mod p^kにおける平方根
アーカイブ
2024 7月
2024 6月
2024 5月
2023 11月
2023 10月
Powered by
Red Leaf
( Rev. 4d249636d ), © Issei Numata, 2007-2025