■
[数論]高木貞治『初等整数論講義 第二版』第五章ノート その6
§47の[問題3]の[例]に進む。先に中身は活用してしまったので、残っているのは基本単数がであることぐらいである。これをテキストpp.312~314の方法に従って、算出してみよう。
まず、Dirichletの証明法にでてきた というものだが、テキストとは逆順になるが の連分数近似 からのように作れるので、これから始める。
先のちょこっと計算プログラムを改造した。
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 ...
うーむ、等しい単項イデアルを探すという作業をすっとばして、すでに二行目にノルムがの元 の存在が判明してしまった。まあ、これを使おう。
なので、その逆数をとする。. なんかすでに答えが登場してしまっているが、いまの時点ではまだこれが基本単数かどうかはわからない。次のステップは
なるものを見つけることである。テキストの限界値の表式(p.314)によると
となる。との組み合わせでなるものを選び出すと しかない。各々のノルムは なので、結局、基本単数は となる。
ついでに[問題4]の[例]でも、の基本単数がとしれっと書かれているので、これも同じ方法で求めてみよう。ちょこっと計算のパラメータをちょっといじった結果:
ω=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 ...
これも偶然、単数が得られているのでここからスタートしよう。例によって逆数をとって 。むっ、再びすでに答えになってますね。グウゼンデスヨグウゼン。限界範囲を求めると(判別式に注意):
となる。
さてさて、
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
最後のだけが単数なので、これが基本単数である。