ユーザがR値を変更して,離散対数を求めることが一応できるようになった.ここまでやったのだから,Rをテキストボックスから数値ボックスに変えるところまでやってしまおう.現在ユーザが設定可能なパラメータは4つあり,すべて数値ボックスになっている.数値ボックスの利点は,①UpDownボタンが使えること,②数値が確定するまでイベントが発生しないというところだ.特に①は使い勝手にかなり影響するので,実用性を重んじるなら必須だろう.
離散対数にはまだあまり本格的に足を突っ込んでいないので,そこまでやるか?という感もあるが,踏み出した足を引っ込める訳にもゆかない.数値ボックスの弱点は最大でもInt64の範囲の値しかとれないという点だが,今のところはそれで十分だろう.Rには現在pRtextという名前が付いている.これまではRの他にもαR,γRのという類似項目があったのだが,今回これらとは縁が切れたので別の名前で呼ぶことにしよう.とりあえず,valueRとしてみよう.
▲Rの設定値がγを超えても何の変化もない.⇒γ値を超えられないようにした方がよい.⇒対処した.
★周期#がゼロとなるのは,ψα=φ(γ)となる場合に限られているのではないだろうか?これは横数列が(固定部を除き)0の並びになっている場合である.もちろん,(φ,#)=0である.⇒周期がゼロとなるのは,対象数αが除数(法)γで割り切れることを意味する.ただし,これはかならずしも α ≡ 0 mod γ を意味しない.α^ψ ≡ 0 mod γ となるような整数 ψ が存在すれば,周期数列桁#はかならずゼロになる.
周期数列桁#=0 の場合は,Λ値は不定であるとする.Λはφ(γ)の約数なので,除数ゼロとなってしまうからだ.また,Λは α^ψ ≡ 1 mod γとなるような最小ψ値と定義されているので,もし,Λ=0となることを許せば α^0 ≡ 1 mod γ がつねに成立してしまうので,Λ値は0しか取れないということになってしまうためである.
▲リターンキーを押しただけではR値は確定しない.Rは値が適合しない場合を許容しているためだ.ψの変化を見ていれば,Rが適合しているかどうかは判定可能だが,見落とした場合適合しているのか否かが分からなくなる.無効な値であることを何らかの方法で示す必要がある.一番確かなのは背景色を変えることではないだろうか?⇒実装した.とてもわかり易くなった.R値がグレー表示されている場合は,無効値である.このような場合にはコントロールパネルの「update」を押すことでノーマルな値に書き換えられる.
★Λ値は剰余数列が固定部をもつとき,そのときのみ不定になる.これは(α,γ)<>1であることと同値である.⇒この命題は間違っている.Λ不定≡(α,γ)<>1ではあるが,このような場合でも固定部0となるケースはある.α=182, γ=250では(182, 250)=2だが,固定部0:#4.従って,Λ値が不定であることと(α,γ)<>1は同値であるとしなくてはならない.⇒最終的にはΛ値不定というのは周期桁#=0の場合に限られることになった.それ以外ではつねに#=Λとなる.
psiの文字列をΛに一括変換した.113個が変換された.⇒変換しきれなかった項目が3つ残っていた.ついでにtotをφに変換した.61個あった.2005年のEFAではU-length function という用語と ψ値が並列に使われている.ようやくEFAからテイクオフできたのではないか?
▲ΦないしΛの約数列を参考表示する.⇒φ(γ)の約数リストを画面に表示するようにした.Λ値をその横に表示するようにしているので,Λがφ(γ)の約数であることが明瞭に示されるようになった.
▲ΛがΦの約数であることをべき剰余検定に応用できないだろうか?つまり,そのことを使って周期数列をより効率的に生成することはできないだろうか?しかし,Φ=γ-1になるときの#は#=Φとなるので,どっちみちγ-1の計算を実行するしかないのだが… 剰余数列をリストアップするのではなく,Λ数を取得するだけなら,Φを使うのは意味があるだろう.意味のない数ではないので,Φの約数リストを出力してみよう.φ(γ)として表示するようにした.Λが空欄になっている場合でも{φ(γ)}には#値は必ず入っている.従って,Λ=#とすることには合理性があると思われるのだが,べき剰余を直接計算して#を求めるのとは別の何らかの手段でΛを獲得することができなくてはならない.
手がかりになるのは(α, γ)値だが,これをどう適用すればよいのか?適用可能なのか?の手掛かりがつかめない.#がゼロという場合もある.このような場合には約数列{φ(γ)}の中に0は入っていないので,不定となることはやむを得ないと考えられるが,それ以外では#=Λでよいはずだ.(α, γ)がゼロでない場合には,αとγをこの値で割って既約にすることができる.このようにしても,既約のα’,γ’の対から生成される{φ(γ’)}の項は,すべて{φ(γ)}の中に含まれていると見られるので,既約対を用いれば,多少は問題を小さくすることはできそうだ.γが素数の場合は別として,γが大きな合成数である場合には,φ(γ)の約数だけをΛの候補とすることで計算を効率化できる可能性は十分あると思う.
▲Λ関数の引数でφを渡しているが,内部で再計算しているので不要だ.確かにループでαを変えながら複数回実行しているところはあるので,事前に計算しておいた方が有利だが,渡し方を間違える可能性があるので,冗長でも内部で計算した方がよい.⇒対処した.
現行のΛ関数はφ(γ)の約数をΛの候補として見ているが,R=1の場合しかチェックしていない.R=0になる場合,および固定部がある場合に対応する必要がある.
★(α, γ)が1でないときは,互い素となるまでGCMでγを割り込んでゆくという方法が効果があるかもしれない.gcm=1ならば従来の方法で解けるので,得られたΛが共通パラメータとして通用する.⇒できた!完璧だ!おそらくこれは今回のセッションで得られた最大の収穫だ.⇒多分,証明はそれほど難しくないと思う.一度正しい命題が発見されれば,その証明は後から付いて来る.
▲α=77, γ=76のとき,Λ関数で停止した.α=76, γ=76,α=39, γ=76,α=31, γ=30でも.⇒逆手順になっていた.既約操作を実施した後で,互いに素のチェックをやっていた.
#=0の場合を除き完全にΛと#が一致するようになった.#=0ということは循環がないということなので,ある意味当然である.たとえば,α=17, γ=17など割り切れる場合にはそのような現象が起こる.
