mod7で12=1,22=4,32=2,42=2,52=4,62=1.平方数は{1,2,4}の 3 つだけ ― {1,2,3,4,5,6}のちょうど半分です.これは偶然ではありません.この記事では,modpの世界での平方数の振る舞いと,そこから生まれる深い理論を解説します.
1 二次剰余の定義
p を奇素数,gcd(a,p)=1 とします.x2≡a(modp) をみたす x が存在するとき,a を p の二次剰余(quadratic residue)と呼びます.存在しないとき二次非剰余(quadratic non-residue)と呼びます.
p=7 のとき,{1,2,…,6} の各元の平方を mod7 で計算すると:12≡1,22≡4,32≡2,42≡2,52≡4,62≡1二次剰余は {1,2,4},二次非剰余は {3,5,6} です.
2 なぜ半分しかないのか ―x↦x2は 2:1 写像
p を奇素数とするとき,1,2,…,p−1 のうち二次剰余は (p−1)/2 個,二次非剰余も (p−1)/2 個です.
写像 f:(Z/pZ)∗→(Z/pZ)∗ を f(x)=x2 で定めます.x2≡(−x)2(modp) ですから,x と p−x(≡−x)は同じ値に写ります.しかも x=p−x(p が奇素数なので 2x≡0)です.逆に,x2≡y2(modp) なら p∣(x−y)(x+y).ユークリッドの補題より x≡y か x≡−y です.つまり,各二次剰余はちょうど 2 個の元の像です.像の個数は (p−1)/2. □
3 ルジャンドル記号
p を奇素数,gcd(a,p)=1 とするとき, (pa)={1−1a が p の二次剰余のときa が p の二次非剰余のとき
p∣a のときは (pa)=0 と定めます.
4 オイラーの規準 ― 効率的な判定法
p を奇素数,gcd(a,p)=1 とするとき, (pa)≡a(p−1)/2(modp)
a が二次剰余のとき,a≡x2 なので a(p−1)/2≡xp−1≡1(modp)(フェルマーの小定理).a が二次非剰余のとき:xp−1−1≡0(modp) は高々 p−1 個の根をもちます.xp−1−1=(x(p−1)/2−1)(x(p−1)/2+1) と因数分解できます.二次剰余は x(p−1)/2≡1 の根を (p−1)/2 個与えるので,x(p−1)/2−1 の根はこれで尽きます.残りの (p−1)/2 個(二次非剰余)は x(p−1)/2≡−1 をみたします. □
5 二次の相互法則 ― 整数論で最も驚くべき定理
p,q を異なる奇素数とするとき, (qp)(pq)=(−1)2p−1⋅2q−1
23 は mod59 で二次剰余か? 直接計算する代わりに相互法則を使います: (5923)(2359)=(−1)11×29=(−1)319=−1
59≡13(mod23) なので (2359)=(2313).さらに相互法則を繰り返し適用して簡約できます.
6 Tonelli-Shanks アルゴリズム
二次剰余であることがわかったら,実際に平方根を求めたくなります.
7 まとめ
modp の二次剰余はちょうど (p−1)/2 個です(x↦x2 が 2:1 写像)
ルジャンドル記号は二次剰余性を ±1 で表す完全乗法的関数です
オイラーの規準により O(logp) で判定できます
二次の相互法則は異なる素数間の二次剰余性を結びつける驚くべき定理です
Tonelli-Shanks で modp の平方根を効率的に計算できます
次の記事では,ユークリッドの互除法の「別の顔」― 連分数と有理近似の世界を探ります.