Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

補充法則と相互法則

定理 F11 を再掲します。

p を奇素数、(a,p)=(b,p)=1 とするとき、
(abp)=(ap)(bp)

一般の正負の整数 n は、q1,q2,, を奇素数、s,t1,t2,0 以上の整数として
n=±2sq1t1q2t2
のように表せるので、整数が平方剰余であるかどうかは

(np)=(1p)(2p)s(q1p)t1(q2p)t2
を計算して判定することができます。すなわち任意の整数について、素因数分解によって奇素因数 qi をすべて求めて
(1p),(2p),(qip)
を計算すれば、その整数の平方剰余/平方非剰余を判定することができるということです。

第1補充法則

(1p) は前々回記事で扱ったオイラーの判定条件

p を奇素数、(a,p)=(b,p)=1 とするとき、
(ap)ap12(modp)

において a=1 とすればよいだけで、平方剰余の第1補充法則とよばれています:

【定理F13:平方剰余の第1補充法則】
p を奇素数とするとき、
(1p)=(1)p12

ここで p4 で割ったときの余り (mod4) で分類すると、p=4k+1 あるいは p=4k+3 のいずれかになります(4k4k+2 は偶数なので p として不適)。それぞれの場合について上の第1補充法則に入れて計算してみると、
(1p)=(1)2k=1,(1p)=(1)2k+1=1
となるので、
x21(modp)
が解をもつのは、p=4k+1 の形の素数のときだけです。たとえば、
x21(mod5)
すなわち
x24(mod5)
は解をもつということです。実際に確認してみましょう。
12,22,32,42,52
5 で割ってみると
1,4,,4,1,0
となって、確かに余り 4 が現れています。すなわち
x2,3(mod5)
が解となります。

第2補充法則

次は a=2 の場合です。これもオイラーの判定条件に当てはめて
(2p)2p12(modp)
によって判定することもできますが、たとえば p=17 とすると
(211)28(mod17)
を計算しなくてはならず、少し面倒です。右辺が (1)t の形になっていれば、t の偶奇によってすぐに平方剰余/非剰余を判定できます。そこで登場するのが次の平方剰余の第2補充法則です。

【定理F14:平方剰余の第2補充法則】
p を奇素数とするとき、
(2p)=(1)p218

この定理の証明の準備として、前回記事で扱った ガウスの補題 を少し噛み砕いた表現に直しておきます(意味は同じです)。

p が奇素数、(a,p)=1 であるとき、
1a,2a,3a,,p12ap で割って余りを並べて、p/2 より大きな数が t 個あるならば、
(ap)=(1)tが成り立つ。

さらに a=2 とすると、(2,p)=1 なので

p を奇素数とすると、
2,4,6,,p3,p1p で割って余りを並べて、p/2 より大きな数が t 個あるならば、
(2p)=(1)tが成り立つ。

第2補充法則の証明にはこの定理を用いますが、一般的な証明は少し難しいので、まずは p=11 として具体的に調べてみます。
2,4,6,8,10
11 で割って余りを並べると、
(1)2,4,6,8,10
というように同じ数が並びます。このなかに p/2=5.5 より大きな数は 3 個あるので、ガウスの補題により
(211)=(1)3=1
となって、x22(mod11) が解をもたないことがすぐにわかります。しかし後の一般的証明のために、この t=3 を別の方法で数えてみます。(1) になかで p/2=5.5 より大きな余りは
(2)6,8,10
です。これらの数を 11 から引くと
(3)5,3,1
というように 5.5 より小さな奇数が並びます。つまり p/2=5.5 より大きな数の個数は 5.5 より小さな奇数の個数に等しくなります。これは
t1+3+5(mod2)
のように表すこともできます。mod2 で考えているので、これに偶数をいくつ足しても合同ですから、
t1+2+3+4+5(mod2)
と書き換えることもできます。以上を踏まえて一般的な証明を記述します。

[定理F14の証明]
2,4,6,,p2,p111 で割って余りを並べると、
(4)2,4,6,,p2,p1
となります。このなかに p/2 より大きな数 rt 個あると仮定します。r は偶数なので pr は奇数です。r>p/2 なので、
pr<p2
となります。つまり tp/2 より小さな奇数の個数と一致するので
t1+3+5++p12(mod2)
これに偶数をいくつ加えても合同なので、等差級数の公式を用いて
t1+2+3+4+5++p1212p12(1+p12)=p218(mod2)
が得られます(証明終)。

相互法則(Reciprocity Law)

 次は相互法則(reciprocity law) の証明を行ないます。

【定理F15:平方剰余の相互法則】
p,q を相異なる 2 つの奇素数とするとき、
(qp)(pq)=(1)p12q12

相互法則はオイラーによって予想され、ガウスによって証明されました。
この定理は modpmodq の世界を結びつけるもので、初等整数論の到達点であり、近代数論の土台となる重要定理といわれています。

証明には ガウスの補題 を用います:

p が奇素数、(a,p)=1 であるとき、
1a,2a,3a,,p12ap で割って余りを並べて、p/2 より大きな数が t 個あるならば、
(ap)=(1)t

ガウスの補題において a=q とおくと、
qx(x=1,2,,p12)
p で割ったときの余りを並べたときに、p/2 より大きいものが n 個あるならば
(qp)=(1)n
が成り立ちます。同様に、
py(y=1,2,,q12)
q で割ったときの余りを並べたときに、q/2 より大きいものが m 個あるとすれば
(pq)=(1)m
が成り立ちます。すなわち
(qp)(pq)=(1)n(1)m=(1)m+n
なので、
(R1)m+n(p12)(q12)(mod2)
が成り立つ(両辺の偶奇が一致する)ことを示せれば、相互法則
(R2)(qp)(pq)=(1)p12q12
を証明できたことになります。

[R1の証明] 格子点を使って証明します。

平方剰余の相互法則(格子点による証明)

(p+12,q+12) を点 C として、ABCD の内側に格子点を打ち、原点 OL(p/2,q/2) を結ぶ直線を引きます。直線 OL の方程式は
y=qxp
です。また、直線 OLy 軸方向と x 軸方向に 1/2 だけ平行移動させた直線をそれぞれ GG,HH とします。qxp で割ったときの余りを r とすると
qx=py+r
と表せます。この式を変形すると
qxp=p+rp
となります。rp/2 より大きいということは、
rp>12
すなわち qx/p の小数部分が 1/2 よりも大きいことを意味します。

これを図で考えると、P は直線 MP 上で、P を挟む 2 つの格子点の間の半分より上にあることになります。言い換えると、P から縦に最も近い格子点は OL より上側のほうだということです。つまり n は平行四辺形 OGGL の内側にある格子点ということになります。

同様に m は平行四辺形 OHHL の内側にある格子点です。角にある小さな三角形も加えても格子点の数は変わらないので、m+n は六角形 OGGCHH の内部にある格子点の数に等しいことになります。

ここで OC の中点 (p+14,q+14) は六角形の対称の中心で、格子点はこの点に関して 2 つずつ対称に存在していることになります。つまり、m+n が偶数か奇数であるかは、(p+14,q+14) 自身が含まれるかどうかで決まります(含まれるなら奇数、含まれないなら偶数です)。含まれるときは、s,t を整数として
p+14=s,q+14=t
これを少し変形して
p12=2s1,q12=2t1
となります。すなわち m+n が奇数であるということは (p12,q12) がともに奇数であることと同じです。したがって
(R1)m+n(p12)(q12)(mod2)
が成り立つことがわかり、これによって平方剰余の相互法則

(R2)(qp)(pq)=(1)p12q12
が示されました。

mod 4 による判定

奇数を 4 で割ったときの余りは 13 のどちらかです。すなわち

x1(mod4) または x3(mod4)

となります。x1(mod4) のときは
x12=4k+112=2k
であり、x3(mod4) のときは
x12=4k+312=2k+1
となります。したがって、p1 または q1(mod4) のときは p12q12 は偶数、p3 かつ q3(mod4) のときは p12q12 は奇数となります。これを使って相互法則を書き直しておきます。

【定理F16:平方剰余の相互法則】
p,q を相異なる 2 つの奇素数とするとき、
(qp)(pq)=(1)p12q12={1(p1q1(mod4))1(p3q3(mod4))

平方剰余の例題

これまでに得た知識を総合すると、どのような方程式についても、平方剰余/非剰余の判定ができます(もちろん ap があまりに大きな値であれば計算は大変です)。判定に必要となる定理をすべて再掲します。

 p,q は奇素数、(a,p)=(b,p)=1

[定理F11:積の法則]
(abp)=(ap)(bp)

[定理F13:第1補充法則]
(1p)=(1)p12

[定理F14:第2補充法則]
(2p)=(1)p218

[定理F15:相互法則]
(qp)(pq)=(1)p12q12

それでは合同方程式
x218(mod31)
に解があるかどうかを調べましょう(このような簡素な問いに答えるために、私たちはここまで頑張ってきたのです!)。ルジャンドル記号を用いて表すと
(1831)
の値が 1 なら解があり(平方剰余であり)、1 なら解なし(平方非剰余)です。まずは積の形に分解します。
(1831)=(23231)=(231)(331)2
(231) は第2補充法則によって計算できます。
(231)=(1)31218=1
(331) の計算には相互法則を用います。相互法則によれば
(331)(313)=(1)312(1)3112=1
なので、
(331)=(313)
と書き直せます。このように変形できることが相互法則の恩恵なのです。なぜなら、31mod3 において 1 と合同なので、
(313)=(13)=1
と計算できます (任意の p で、x21 は解をもちます)。したがって、
(1831)=1
となり、x218(mod31) は解をもつことがわかりました。すなわち 1831 の平方剰余です。

Excelで平方剰余の問題を解いてみます

コンピュータの力を借りると、平方剰余/非剰余の判定のみならず、実際の解を求めることも比較的容易にできます。さきほどの合同方程式
x218(mod31)
を満たす最小の整数 x を求めてみます。

Excelによる平方剰余の解法

A 列に 1 から 10 までの整数、B 列にその平方数、C 列には平方数を 31 で割った値が並んでいます。余りが 18 となっているセル(緑色に塗られているところ)があります。すなわち解が x=7 であることがわかります。このように問題をビジュアル化できるので、Excel は数論にとって相性の良いツールです。

VBAで平方剰余の問題を解いてみます

VBA で平方剰余の問題を解く QR関数をつくっておきました。QR は Quadratic Residue(平方剰余)の頭文字です。VBE を起動して標準モジュールに貼りつけると、ワークシートで Excel 関数のように扱えます。

'VBA Quadratic Residue

Function QR(a As Long, p As Long) As Variant
  Dim x As Long

  'pについてaと合同な最小数を得る
  Do While a > p
    a = a - p
  Loop

  '解が見つからない場合はFalseを返す
  QR = False

  'x^2をpで割った余りがaであればxは解
  For x = 1 To p - 1
    If x ^ 2 Mod p = a Then
      QR = x
      Exit For
    End If
  Next x

End Function

QR関数を使うときはセルに「=QR(a,p)」の形で入力します。もし解がなければ(平方非剰余であるならば)、この関数は False を返します。さきほどの合同方程式
x218(mod31)をこの関数で解いてみましょう。
「=QR(18,31)」と入力すると、7 という値が返ってきます。つまり、1831 の平方剰余であり、方程式の解は x=7 です。

エクセルや数学に関するコメントをお寄せください