PsiFunctionで一つ疑問が持ち上がっている

さて,かなり整っては来ているのだが,PsiFunctionで一つ疑問が持ち上がっている.「n・kが素は,①(n, k)=1,②drop=0, ③ψ=periodと同値ということになる」という点だ.ψが値を持つとき,つまり,非ゼロのときは確かにψ=periodになっているが,drop=0でψが値を持たない場合がある.これは,剰余マトリックスの最終版でも同じ動作になっているので,最近の修正の影響ではない.つまり,②drop=0と①(n, k)=1は同値は元々成立していなかったと見るしかない.drop=0のときに強制的にψ=periodとすることは不可能ではないが,果たしてそれが正しいのかどうかという点に関しては吟味する必要があるだろう.

TestMatrixにはもう一つ疑問がある.gcd1とgcd2には i ないし j とK-1のGCMが入っているが,これは i, j とKのGCMだったのではないだろうか?⇒暫定的に修正を入れた.こちらの方が正しいように思われる.ただし,K=10のとき,N=1ではG=1だが,ψ=0になっている.これはG=1の場合はつねにψが立つというルールと整合しない.⇒これを修正すると,今度は「文字数xGCMは k-1 に一致する」と整合しなくなる.これはK=3,J=2で発生する.これは縦数列でのみ発生するエラーなので,gcd2は従来仕様に戻してみよう.⇒これは暫定修正である.

N-123,K=10,B=10→リターンで確定して,ValueChangedで停止した.InvertFuncがketa=5を返し,B^keta ≡1 mod Nとなった.ψ=5がketaと一致しないためだ.従来のPsiFunctionなら問題は生じない.⇒従来関数と現関数ではModPowの呼び出しが逆になっている.従来方式ではModPow(B, px, num)となっているのに対し,新版ではModPow(num, px, K)であり,num⇔B/Kが逆転している.従って,関数を共通化するためには,呼び出し側で逆転させる以外ない.実際,InvertFuncは通常のべき乗剰余の逆操作になっているのだから,そうならなければおかしい.⇒対処した.

N=12345678で制御が戻ってこない.⇒InvertFuncで時間が掛かっている.それにしてもこんなに遅かったろうか?前にはもっと速かったような気もする… 10桁くらいまではそこそこ走っていたような気もするのだが… このInvertFunc中の周期の計算とべき乗剰余数列の周期計算を共通化するというのがおそらく当面の目標になるのではないか?

ValueChangedでStrComp(str3.Substring(0, MAXDOUBLEKETA), str4.Substring(0, MAXDOUBLEKETA))により停止した.MAXDOUBLEKETA=16という定数だ.これは検算のために倍精度数と比較しているところだ.str3はゼロの並び.”0.0000000000000…0000000000″,str4は”0.0000000810000066″のように数字が入っている.この数字は8.1000006642000542E-08だ.MakeDecimalStringで失敗しているような気もする.

現行では,N^pow でpowに64以上の値が設定できない.これは不都合だ.Maximumが64に設定されていた.とりあえず,65,535までは設定できるようにしてみた.

コメントを残す

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

CAPTCHA