最終的な着地点も朧気ながら見えてきた

かなりいい感じになってきた.最終的な着地点も朧気ながら見えてきた感じがする.Let’s keep it up!

SeedTestでハングしてしまった.検定範囲は,N-123→100でK=7, B=13.かなり状態が悪い.ブレークボタンで停止することもできない.リモートセッションなどやっていないのに,こんなパネルが出た.

image

一旦終了→再起動で今度は問題なく動作した.ValueChangedで「Kが素数で原始根にならない」というのが出ている.調べておこう.n=123 K=7 ψ=40で起きている.ψがn-1という値を取った場合を「原始根を検出」として,インジケータをオンにしている.原始根は,尽数列になる場合と重なっているが,K=7の場合ではN=3と5がそれに相当する.N=5ではψ=4となり,原始根オンになったが,3ではそうならない.3の場合のψ値は1だ.どうも話がまったく合っていないような気がするのだが… PsiFunctionの引数の順序を逆にしてみたところ,ψが決定できないようになってしまった.どうも,ここの論理は見ているものが逆なのではないかという気がする.何を基数とし,何を指数とするかというところで混乱しているのではないか?

いろいろと手当しなくてはならないところばかりだが,まず,デバッグコンソールに出している情報をすべて出力ペーンに出すようにしよう.⇒いや,それも少しやり過ぎのようだ.やはり選別して出した方がよい.位数と原始根の関係を整理しておこう.「素数pに対して,r^x≡y mod pのとき,y=p-1となる最小のxをrのpに対する位数という」,また,原始根については,「r~r^(p-1) mod pがいずれも1でないようなrをpに対する原始根と呼ぶ」とされる.この定義によれば,素数pに対し,r^(p-1)≡1がつねに成立するため「原始根とは位数がp-1であるようなもの」であると言える.

たとえば,3は7に対する原始根であり,法7に対する2の位数は3である.明らかに現在の実装はどこかで間違えている.ψをφから求めようとしているが,このφはφ(N)ではなくて,φ(K)でなくてはならない.PsiFunctionの中で自前で計算するようにした.⇒正しく動作するようになった.多分,これが一番安全な策ではないかと思われるので,引数から外しておくことにしよう.

N=4, K=7のとき,ValueChangedにおいて,tot <> psisu2で停止した.φ=2,ψ=3.ψ=n-1=3だが,φとは一致しない.これはφ=n-1となるのはnが素数の場合に限られると考えられるので,ここでは成立しなくてよいのではないか?⇒トーシェント関数の対象が間違っていた.

原始根が現れたときにはインジケータをオンにするようになっているが,合わない.N=3はK=7の原始根であるのにインジケータがオンになっていない.⇒これは判定を誤っている.見るべきはψ=K-1なのに,ψ=n-1で判定しようとしている.確かにこれは誤りだが,もう一つ誤りがある.φをnから計算している点だ.ここではφ(K)を見なくてはならない.PsiFunctionでは引数を廃止しているのでこの問題は解消しているが,外部にはまだ誤りが残っている.⇒対処した.

N=5,K=7のとき,DispParametor2において,keta > 0 And gcm <> ketaで停止した.keta=4,gcm=2という値が入っている.fixed=1でnnstr=”/D:0.2&7A52/”だ.B=13になっている.これは多分上記でφ(K)を取るようにしたことの反作用だと思う.後半部ではおそらくφ(N)が求められているのだと思う.⇒対処した.これでおおむね正しく動作するようになった.InvertFuncでは2つの相反することをやっている,というところがポイントだ.

現行ではResidue Testでは出力コンソールに何も表示されない.デバッグコンソールに出しているものを出力するようにしておこう.

コメントを残す

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

CAPTCHA