12章 Gauss和(Gauss sum)


方程式 n−1=0 の解を、1のn乗根と呼ぶ。
これは、n次方程式なので、1のn乗根はn個存在する
1のn乗根は、以下の式で表わされる。

z=cos(2πm/n)+i・sin(2πm/n)
 =ei (2πm/n)

(m=0, 1, ... , n-1)

1のn乗根には、n乗して初めて1になるものもあれば、n乗する前に1になってしまうものもある。
例えば、1の4乗根は、1、i、−1、−iの4個だが、
1、−1については2乗で1となり、i、−iについては、4乗で初めて1となる。
後者のような場合を1の原始n乗根と呼び、ζで表わす。
1の原始n乗根は、φ(n)個存在する
(φ(n)は、Euler関数(0<i<nでnと互いに素となるiの個数))

n−1=(z−1) (zn-1+zn-2+……+z+1)

より、1の原始n乗根は、

n-1+zn-2+……+z+1=0

の解である。


pを素数とする。
1の原始p乗根と、前章の平方剰余を組み合わせて、以下のような式を考える。

G= p-1
Σ
i=1
(i/p)・ζi = (1/p)・ζ+(2/p)・ζ2+……+(p-1/p)・ζp-1

この値を Gauss和(Gauss sum)と呼ぶ。小さいpについて、Gを具体的に書き表わしてみる。

ζ−ζ2=ζ(1−ζ)
ζ−ζ2−ζ3+ζ4= ζ(1−ζ)2(1+ζ)
ζ+ζ2−ζ3+ζ4−ζ5−ζ6= ζ(1−ζ) (1+2ζ+ζ2+2ζ3+ζ4)
11 ζ−ζ2+ζ3+ζ4+ζ5−ζ6−ζ7−ζ8+ζ9−ζ10
=ζ(1−ζ) (1+2ζ+ζ2+2ζ3+3ζ4+2ζ5+ζ6+ζ8)
13 ζ−ζ2+ζ3+ζ4−ζ5−ζ6−ζ7−ζ8+ζ9+ζ10−ζ11+ζ12
=ζ(1−ζ)2(1+ζ) (1+2ζ2+2ζ3+3ζ4+2ζ5+2ζ6+ζ8)
17 ζ+ζ2−ζ3+ζ4−ζ5−ζ6−ζ7+ζ8+ζ9−ζ10−ζ11−ζ12 +ζ13−ζ14+ζ15+ζ16
=ζ(1−ζ)2(1+ζ) (1+2ζ+2ζ2+4ζ3+3ζ4+4ζ5+2ζ6+4ζ7+3ζ8+4ζ9 +2ζ10+2ζ11+ζ12)
19 ζ−ζ2−ζ3+ζ4+ζ5+ζ6+ζ7−ζ8+ζ9−ζ10+ζ11−ζ12−ζ13−ζ14−ζ15+ζ16+ζ17−ζ18
=ζ(1−ζ) (ζ−ζ2+ζ4+2ζ5+3ζ6+2ζ7+3ζ8+2ζ9+3ζ10+2ζ11 +ζ12−ζ14+ζ16)

念のため因数分解もしてみたが、一見しただけでは、これらの式がどのような値になるのか、
皆目見当がつかない。
しかし、2乗すると状況が一変する。


マクロを組んでみる。

まずpに対し、1、……、p−1が平方剰余かどうかを調べて、a(i) に格納する。 (これは、前章のマクロを使う。)
Gの計算は、Gの係数、a(0),a(1),……,a(p-1) を以下のように2重ループでまわして w(i) に格納すればよい。

for i=0 to p-1:w(i)=0:next i

for i=1 to p-1
    for j=1 to p-1
        n = (i+j) mod p
        w(n) = w(n) + a(i) * a(j)
    next j
next i

ζn=1より、i乗の項とj乗の項の積を格納する場所 w(n) のnの値は、
n=i+jではなく、nを mod p で考えたときの値となる。

マクロは以下のようになる。

Sub Record1()
    Worksheets("Sheet1").Activate

Dim a(18), w(18), p(8)

p(2) = 3: p(3) = 5: p(4) = 7: p(5) = 11: p(6) = 13: p(7) = 17: p(8) = 19

'  ヘッダー

Cells(1, 1).Value = "p"
For i = 0 To 18: Cells(1, i + 2).Value = i: Next i

'  メインループ

For k = 2 To 8: v = p(k)

'  平方剰余の計算

    For i = 0 To v - 1: a(i) = -1: Next i

    For i = 0 To v - 1
        n = i ^ 2 - v * Int(i ^ 2 / v)
        a(n) = 1
    Next i

'  2乗(G^2)の計算

    For i = 0 To v - 1: w(i) = 0: Next i

    For i = 1 To v - 1
        For j = 1 To v - 1
            n = (i + j) - v * Int((i + j) / v)
            w(n) = w(n) + a(i) * a(j)
        Next j
    Next i

'  値をセルに表示

    Cells(k, 1).Value = v
    For i = 0 To v - 1: Cells(k, i + 2).Value = w(i): Next i

Next k
End Sub

実行結果は以下のとおり。

  10 1112131415 1617181920
1p012 34567891011 12131415161718
23-211                  
354-1-1-1 -1                
47-6111 111              
511-10111 1111111         
61312-1-1-1 -1-1-1-1-1-1-1-1-1       
71716-1-1-1 -1-1-1-1-1-1-1-1-1 -1-1-1-1  
819-18111 1111111111 11111

例えば、p=3のときは、G2=−2+ζ+ζ2 となる。
この値は、もっと簡単な値にならないのか?


ここで冒頭の式より、

ζn-1=−(ζn-2+ …… +ζ+1)

となるので、これを2乗計算が終わった後に適用してみる。
マクロの修正は簡単なので特に示さない。実行結果は、以下のとおり。

 123456 789101112131415 1617181920
1p012 34567891011 12131415161718
23-300                  
3550000                
47-7000 000              
511-11000 0000000         
61313000 000000000       
71717000 000000000 0000  
819-19000 0000000000 00000

なんと、定数になってしまった。


3以上の素数について、G2の値は以下のようになる。


前頁 目次  

E-mail : kc2h-msm@asahi-net.or.jp
三島 久典