GetResiduCycleにはバグが残っている

BuildPowerGridでエラーが起きている.まだ,修正が完結していない.BuildPowerGridでは,範囲を限定したマトリックスを操作するようになっているが,BuildMatrixの対応修正が完了していない.まず,左上点を指定して範囲限定のマトリックスを生成できるようにする必要がある.左上点の計算はBuildPowerGridから借用してきているので,あとはそれを使ってマトリックスをシフトするだけだ.⇒一応数字は出てきた.

▲行ヘッダをクリックしたら,ヘッダ列に1という数字の並びが出現した.行ヘッダには数字は表示されないものと思い込んでいたのだが… 何か設定があるのだろうか?しかも,すべての行に1が表示されてしまうというのはどういうことだろう.

α=7, γ=2, Θ=13という設定で,GetResidueCycleで停止した.j=13,R=10で周期が検出され,j=j+1でループを抜けようとして j > maxとなった.この関数はPsiFunctionから呼び出されている.cycle(0)=7でcycle(1)=10だ.GetResidueCycleの戻り値は周期だが,cycle(12)=7となっているのを見落としているのではないか?2023-06-13に「φ(Θ)剰余数列周期の公倍数である」という発見があり,このときにGetResidueCycleと類似のGetResidueStripeという関数を新設しているが,この辺りはまだ十分バグが取れていないのではないだろうか?

この時期より前の版に戻って同じ障害が発生するかどうかを見てみよう.GetResidueStripeは元々はMakeStripePatternという関数だ.また,GetResiduCycleはBuildMatrixをお手本にして新規に作られたものと思われる.従って,まだバグが残っている可能性は十分あると見なくてはならない.GetResiduCycle→GetResidueCycleとリネームしておこう(eが落ちていた).GetResiduCycleを修正して,cycle(0)に格納されている初期値を参照するようにした.

ValueChangedでPrimeK.Checked <> primeで停止した.⇒PrimeK.Checkedを設定している場所がない.どうも一行誤って消してしまったようだ.IsPrimeという関数も内部でTotientFuncを呼んでいるが,比較的小さな素数に関するテストを事前に実行して効率化しているので,こちらを使うべきだ.(いましばらくは並列実行して検算する必要があるとしても)⇒仕掛りの箇所には何か目印(『暫定』など)を付けて置かないと忘れてしまう.

ダメだ.どこを間違えたのだろう.すべてのセルが1になってしまった.MT(i, 1) = BigInteger.ModPow(RowTop + i – 1, ColumnTop, Θ)の式が間違っている.ColumnTop – 1から始めていたので,指数がすべて0になってしまっていた.しかし,これでも間違っている.古い版の論理は正しく動作している.確かに横数列の周期はΘ-1になるので,それを加味しなくてはならないのだが… どうすればよいのだろう?

コメントを残す

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

CAPTCHA