[数論]高木貞治『初等整数論講義 第二版』第五章ノート その6

 §47の[問題3]の[例]に進む。先に中身は活用してしまったので、残っているのは基本単数が\frac{5+\sqrt{21}}{2}であることぐらいである。これをテキストpp.312~314の方法に従って、算出してみよう。

 まず、Dirichletの証明法にでてきた \mid x+\omega y \mid < \frac{1}{n}というものだが、テキストとは逆順になるが \omegaの連分数近似 x/yから\mid x-\omega y \mid < \frac{1}{y}のように作れるので、これから始める。
先のちょこっと計算プログラムを改造した。

import math
from fractions import Fraction

# x = a+b √m を連分数展開する

a = Fraction(1,2)
b = Fraction(1,2)
m = 21

def value(x):
	return x[0]+x[1]*math.sqrt(m)

# 連分数を分数に変換
def cf2frac(cf_list):
    cf_list = cf_list[::-1]
    f = Fraction(0,1)

    for c in cf_list:
        if f!=0:
        f = 1/f
        f += c 

    return f

def norm(x):
    return x[0]*x[0]-m*x[1]*x[1]

omega = [a,b] # x ~ a+b*math.sqrt(m)
omega_p = [a,-b]

print('ω={}+{}*√{}={}'.format(a,b,m,value(omega)))
print(\'={}-{}*√{}={}\n'.format(a,b,m,value(omega_p)))

x = omega

cf = []
for i in range(100):
    x_int = math.floor(value(x))
    cf.append(x_int)

    #x ~ 1\(x-x_int)
    x = [x[0]-x_int,x[1]]
    n = x[0]*x[0]-m*x[1]*x[1]
    x = [x[0]/n,-x[1]/n]
    f = cf2frac(cf)
    f_n = f.numerator
    f_d = f.denominator
    d = [f_n-f_d*omega[0],-f_d*omega[1]]
    print('{}, {}+{}*√{}, x/y={},'.format(x_int,x[0],x[1],m,f),end='')
    print(' x-yω={}+ {}*√{}, N(x-yω)={}'.format(d[0],d[1],m,norm(d)))

結果は次の通り。

ω=1/2+1/2*√21=2.79128784747792
ω'=1/2-1/2*√21=-1.79128784747792

2, 1/2+1/6*√21, x/y=2, x-yω=3/2+ -1/2*√21, N(x-yω)=-3
1, 3/2+1/2*√21, x/y=3, x-yω=5/2+ -1/2*√21, N(x-yω)=1
3, 1/2+1/6*√21, x/y=11/4, x-yω=9+ -2*√21, N(x-yω)=-3
1, 3/2+1/2*√21, x/y=14/5, x-yω=23/2+ -5/2*√21, N(x-yω)=1
3, 1/2+1/6*√21, x/y=53/19, x-yω=87/2+ -19/2*√21, N(x-yω)=-3
1, 3/2+1/2*√21, x/y=67/24, x-yω=55+ -12*√21, N(x-yω)=1
3, 1/2+1/6*√21, x/y=254/91, x-yω=417/2+ -91/2*√21, N(x-yω)=-3
1, 3/2+1/2*√21, x/y=321/115, x-yω=527/2+ -115/2*√21, N(x-yω)=1
3, 1/2+1/6*√21, x/y=1217/436, x-yω=999+ -218*√21, N(x-yω)=-3
...

 うーむ、等しい単項イデアルを探すという作業をすっとばして、すでに二行目にノルムが1の元 \frac{5-\sqrt{21}}{2}の存在が判明してしまった。まあ、これを使おう。
\frac{5-\sqrt{21}}{2}\fallingdotseq 0.209 < 1なので、その逆数を\epsilonとする。\epsilon = \frac{2}{5-\sqrt{21}}=\frac{5+\sqrt{21}}{2}\fallingdotseq 4.79. なんかすでに答えが登場してしまっているが、いまの時点ではまだこれが基本単数かどうかはわからない。次のステップは

1 < x+\omega y \le \epsilon

なるものを見つけることである。テキストの限界値の表式(p.314)によると
 \mid x \mid < \frac{1}{\sqrt{d}}(\mid \omega \mid + \epsilon \mid \omega' \mid)\fallingdotseq \frac{1}{\sqrt{21}}(2.79 + 4.79\cdot 1.79 )\fallingdotseq 2.48
 \mid y \mid < \frac{1}{\sqrt{d}}(\epsilon + 1) \fallingdotseq \frac{1}{\sqrt{21}}(4.79 +1)\fallingdotseq 1.26
となる。x=-2,-1,0,1,2y=-1,0,1の組み合わせで1 < x+\omega y \le \epsilonなるものを選び出すと -1+\omega=\frac{-1+\sqrt{21}}{2},\ \omega=\frac{1+\sqrt{21}}{2},\ 1+\omega=\frac{3+\sqrt{21}}{2},\ 2+\omega=\frac{5+\sqrt{21}}{2}=\epsilonしかない。各々のノルムは -5,\ -5,\ -3,\ 1なので、結局、基本単数は \epsilon=\frac{5+\sqrt{21}}{2}となる。

 ついでに[問題4]の[例]でも、K(\sqrt{6})の基本単数が5+2\sqrt{6}としれっと書かれているので、これも同じ方法で求めてみよう。ちょこっと計算のパラメータをちょっといじった結果:

ω=0+1*√6=2.449489742783178
ω'=0-1*√6=-2.449489742783178

2, 1+1/2*√6, x/y=2, x-yω=2+ -1*√6, N(x-yω)=-2
2, 2+1*√6, x/y=5/2, x-yω=5+ -2*√6, N(x-yω)=1
4, 1+1/2*√6, x/y=22/9, x-yω=22+ -9*√6, N(x-yω)=-2
2, 2+1*√6, x/y=49/20, x-yω=49+ -20*√6, N(x-yω)=1
...

これも偶然、単数5-2\sqrt{6}\fallingdotseq 0.101が得られているのでここからスタートしよう。例によって逆数をとって \epsilon=\frac{1}{5-2\sqrt{6}}=5+2\sqrt{6}\fallingdotseq 9.90。むっ、再びすでに答えになってますね。グウゼンデスヨグウゼン。限界範囲を求めると(判別式d=4\cdot 6=24に注意):
 \mid x \mid < \frac{1}{\sqrt{d}}(\mid \omega \mid + \epsilon \mid \omega' \mid)\fallingdotseq \frac{1}{\sqrt{24}}(2.45 + 9.90\cdot 2.45)\fallingdotseq 5.45
 \mid y \mid < \frac{1}{\sqrt{d}}(\epsilon + 1) \fallingdotseq \frac{1}{\sqrt{24}}(9.90 +1)\fallingdotseq 2.22
となる。
さてさて、

import math
from fractions import Fraction

m = 6

def value(x):
	return x[0]+x[1]*math.sqrt(m)

def norm(x):
    return x[0]*x[0]-m*x[1]*x[1]

for x in range(-5,5+1):
    for y in range(-2,2+1):
        a = [x,y]
        v = value(a)
        if v > 1 and v<=10.0: # ちょっとインチキ
            print('{}+{}*√{}: Norm={}'.format(a[0],a[1],m,norm(a)))

により、

-3+2*√6: Norm=-15
-2+2*√6: Norm=-20
-1+1*√6: Norm=-5
-1+2*√6: Norm=-23
0+1*√6: Norm=-6
0+2*√6: Norm=-24
1+1*√6: Norm=-5
1+2*√6: Norm=-23
2+0*√6: Norm=4
2+1*√6: Norm=-2
2+2*√6: Norm=-20
3+0*√6: Norm=9
3+1*√6: Norm=3
3+2*√6: Norm=-15
4+-1*√6: Norm=10
4+0*√6: Norm=16
4+1*√6: Norm=10
4+2*√6: Norm=-8
5+-1*√6: Norm=19
5+0*√6: Norm=25
5+1*√6: Norm=19
5+2*√6: Norm=1

最後の5+2\sqrt{6}だけが単数なので、これが基本単数である。