今日前半のテーマ:
PID に対して, -加群がどのような構造をもつかが、 単因子論の話題であった。
後半では素因数分解の効率化について考えたい。 を素因数分解する一番原始的な方法は、 から までの 整数で順次割っていく方法である。 ただしこれでは に比例する時間がかかる。
(手法1)
最初の
個を除いて有限個の数を繰り返す数列
整数係数の多項式
を決めて、
10 n=607143768775207 '分解する数 30 a=1:b=1 ' a=x_i, b=x_{2i} のつもりである。 50 while 1 ' ここから wend (150 行)まで無限ループ 60 a=fnf(a)@n 70 b=fnf(fnf(b))@n 80 x=gcd(a-b,n) 90 if x<>1 then print x,n :end 150 wend 160 end 1000 def fnf(k) ' fnf() 関数の定義; fn... はユーザ定義関数 1010 return(k*k+1) ' もちろんほかの関数でもよい。
ubasic などのプログラム言語を使ったことがないひとは、 講義のホームページからubasic をダウンロードし, ubasic を解凍したあとそのフォルダにメモ帳などで上記プログラムを 書いて、"rho.txt" などに保存し, そのあとubasic を起動して, load "rho.txt" とすればよいだろう。 講義のページには数式処理ソフト mupad もおいてあるので, それを使ってもよろしい。ただし,mupad の ifactor 関数を用いると さすがに簡単すぎるので、ifactor だけは今回は禁じ手とする。