n:1000 x k:50 のテストが完了

昨夜仕掛けておいた n:1000 x k:50 のテストが完了している.問題があれば停止することになっているので,特に問題になる事象は発生していない.ResidueFuncをマトリックスで走らせてみよう.ResidueFuncは周期とドロップを返さなくてならないので,引数を追加してbyrefにしておこう.フォームが開けなくなった.

Failed to launch the design tools server process

VS2019を修復インストールしてみたが効果なし.デバッグモードで一度走らせたら,その後は開けるようになった.TestAllPrimeでk=2~1000までのテストが完了した.Mとcycle+dropは完全に一致している.ψとMないし,ψとcycleでは乖離がある.ただし,このテストでは対象kを素数に限定している.一般の場合はどうか?⇒問題なさそうだ.ただし,一つのkの検査ではk^2のコストが掛かるので,kが大きくなるとかなり時間を要するようになる.とりあえず,k>600でテストを打ち切ることにしよう.

M=cycle+dropは完全に確立できたが,ψ値はほとんど一致していないという感じだ.ψという数は本来,n^ψ=1 mod k となるような最小の値と定義されているので,ψ値を求められない場合がある(ψ=0).ψが剰余類群の位数であるという定義に従えば,ψ=cycle ないし ψ=cycle+dropであってもよいような気がするのだが,ともかく,もう一度ψ関数周りをチェックしてみることにしよう.PsiFunctionでは,「トーシェント数を因数分解してψ数を推定する」ということをやっている.このループの中で,ModPow(b, px, num)=1となる場合のpxをψと認定している.式で書くと,k^p mod n ≡1ということになる.しかし,上掲の式ではn^ψ=1 mod kとなっていて,除数と基数が逆になっているようにも思われる.

PsiFunctionでは引数でnのφ数を与えているが,これはφ(n)であり,φ(k)ではない.どうもModPowの使い方が間違っているのではないかという気がする.逆に入れ替えてみよう.⇒動作しない.nとbが互いに素であるのにψ値が決められなくなってしまった.やはり現状の設定で間違っていないようだ.⇒いや,そもそもPsiFunctionに渡しているφが間違っているのではないか?⇒確かにそのようだ.φ(k)を使わなくてはならないところ,φ(n)を使っていた.これを修正したら,ψの不一致はψが値を持っていない場合のみになった.⇒この修正はresiduFuncないしPsiFunctionを呼び出しているすべての箇所に影響するので久留島喜内の方も点検しておいた方がよい.

nとkが互いに素であるという条件はφ(k)からψを割り出すための絶対条件である.つまり,一般にはnとkが素でなければψを決定することはできないが,マトリックスでは異種文字数の形式で巡回周期を割り出すことができる.ResidueFuncではdropとcycleとしてψに相当する数字を取り出すことができる.だとすれば,PsiFunctionを使わなくてもψを決定できるのではないか?

ともあれ,先に進む前にPsiFunctionの修正の始末を付けておこう.⇒喜内ではすべてφ(n)を使っている.φ(n)とφ(k)では意味がまったく違う.これでよいのだろうか?⇒これはもう一度後から見直すことにする.喜内では逆数の循環小数を見ているので状況はおそらくかなり異なるものと思われる.こちらの用法では基数と除数が逆転している可能性はある.⇒PsiFunctionの仕様は現行で正しいと思われるので,喜内側の呼び出し方を変える必要があるのではないか?

TestMatrixで検査している限りでは,ψとcycleはψが決定不能(=0)でない場合にはつねに一致している.従って,ResidueFuncのcycle値をψとしてよいものと思われる.

スタックオーバーフローが発生した.⇒ResidueFuncの中でPsiFunctionを実行するようにしたためと思われる.PsiFunctionの中からResiduFuncを呼び出している.⇒これは実装を中断している部分のコードだ.これは止めておこう.

一応これですべて整合するようになったのではないだろうか?現行ではψ値はn・kが素でないときは未定ないし決定不能となっているが,これを拡張してψ=剰余数列周期とするのかどうか?が問題だ.この問題は,ここではとりあえず保留としておこう.どちらが使い勝手がよいかで決定すればよい.剰余類群の位数という定義もかなりあいまいであるような気がする.剰余類群と呼ぶときに,その中にドロップ項は入っているのかいないのか?数値的には入っていないように思われるが,それでよいのかどうか?⇒ドロップが発生するときにはψ=0になっている.剰余類群というのは,nとkが互いに素の場合しか定義されていないと思うので,その限りでは整合していると言える.n・kが素は,①(n, k)=1,②drop=0, ③ψ=periodと同値ということになる.

そろそろ,マトリックスとべき乗剰余数列を統合してもよいのではないだろうか?マトリックスにはもう少し付加情報を出したいのだが,それよりも優先度が高いような気がする.マトリックスはボタン2つまで簡素化したので,統合は難しくない.⇒とりあえず,動いた.

image

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA