昨日仕掛けたテストがまだ走り続けている

昨日仕掛けたSeedTestがまだ走り続けている.対象数は560330000で,1~この数字までの検定を行うという仕掛けだ.現在n=522670の辺りを走っている.きびきびとした動きで気持ちよい.完全に安定動作するようになったと言えそうだ.まだ対処必要なところは多々あるが,おおむね仕上がりに近付いていると言ってよい.とりあえず,ここで一端打ち切って先に進むことにしよう.

Seed Testに限ってQの値が変化するのはなぜか?これは,quotientという名のテキストボックスだ.⇒Divisionで更新している.この関数ではgcm(n, b)も更新している.この関数は,divisor.TextChangedとValueChangedから呼び出されている.このような仕様になっているのは,このツールを電卓代わりに使って剰余計算できるようにしたいという動機による.現在はこのツールを主に剰余演算に使おうとしているので,むしろ,one shotのときのみ更新されるようにした方がよいのではないか?あるいは,値が変更されたときには,oneshotを実行するようにしてもよい.⇒テキスト入力で自動更新ならone shotボタンは不要になる.それでよいのではないか?Divisionも廃止しておこう.

べき乗剰余周期検定でもパラメータの変化を実時間表示してみようと思ったのだが,変化が速過ぎて読めないのであまり意味がないということになったので,現状のままとする.これでほぼ実装は完了したのではないだろうか?出力の内容は未整理のままだが,これは必要に応じておいおい手を入れてゆくしかない.しかし,リリースするとなれば,簡単な取説は必要になるだろう.少し,長時間ランニングさせてみたいのだが,その際にチェックすべき点があるだろうか?

一応,現時点で5つのテストが主要機能として残ったことになるが,それらのテストの要点は何なのかも明らかにする必要がある.もう一つ,過去に作ったコードで仕様から外されているものがあるが,それらで何をやろうとしていたのかも調べる必要がある.まず,それをやっておこう.②PrimeTestClickの中でコメントアウトされている処理として,①InversePowerというのと,ModuloMultiというのがある.これらはなにものか?どちらも,InvertFuncと同じパラメータを返しているので,同じ機能の別バージョンとも考えられる.

InversePowerはnとbを与えられてk,fixed,Rを返す関数と考えられる.値を返すとしたらそのパラメータはbyrefでなくてはならないが,古い版ではグローバル変数で返していた可能性もある.InversePowerは古いコードなので,PFactorを使っている.ただし,これはチェック用でPFactor(b) = bを検査しているだけだ.PFactor(b) = bというのはbが素数ということだろうか▼マークを付けているのだが…この関数の手法はInvertFuncと基本的には同じだが,RTもITもQTも使っていないかなり単純な仕掛けだ.つまり,剰余が0になるか,1になる場合しか見ていない.多分,この関数はすでにお役御免なのではないだろうか?

ModuloMultiというのはもうちょっと複雑な関数だ.この関数ではn-1の因数分解をやろうとしている.この関数ではいくつか配列を使っている.nが奇数の場合のみ処理の対象とし,n-1の約数を配列Fに格納している.また,約数の個数をfとしたとき,2^fのサイズの配列E=を生成して,約数の積のようなものを格納している.これは結局,n-1の約数の積としてψを計算しようとしているのではないだろうか?どうもちょっと読みきれないが,Psiで返す値と比較してみればなにか分かるかも…

どうも,この関数は仕上がる前に放棄されていたのではないだろうか?簡単に配列オーバーフローが発生してしまう.Fという配列はサイズnの配列として生成されているが,約数の個数がそれを超過してしまっている.どうも,PFactorが壊れているような感じだ.n=123なので,n-1=122=2*61で約数は2つしかない.PFactorは一番小さい約数を返す関数なのでxを対象数として,x-1から割り始めて割り切れればその値を返すようになっている.この動作は間違ってはいないような気がするが…PFactorの動作は間違っていない.Q=2となった後,2÷2=1が格納され,その次に,Q=2をその1で割って2を返している.

このループはQ>1の間はループするようになっているので,いつまで経っても停止しない.つまり,PFが1に達した時点で終了していなくてはならないところだ.一応動作するようになったが,まだエラーが出てくる.どういうことを考えているのかよくわからないが,UというULOngに2のべき乗の値を格納している.このべきが615という大きな数になっている.2^615は10進で186桁というとんでもない数だ.

exという数は約数の積の形になっているのだが,Uという数を作って何をしようとしているのだろう?どうも読みきれないところだが,ろくなことを考えていなかったような気がする.おそらくここで考えていたことは,すべてを2進ベースで考えるということだったのではないだろうか?いずれにせよ,想定外の状況にはまってしまっていたように思われる.これ以上追求しても意味がないように思われるので,中断してとりあえず,廃棄ということにしておこう.

Prime Testにはn-1というのがしきりに出てくる.ちょっと調べてみよう.現行論理ではn-1の約数からψを割り出しているので,n-1\ψは当然割り切れているはずだが,amariが生じたときには◯を表示するようになっている.というか,ほとんどのケースで◯になっている.これはどういうことだろう?n-1という数はかなり重要な数なので,その約数を表示してみたい.n-1をkで割った余りは表示されている.

確かに,n=123でn-1=122=2×61だから,10で割れば2余ることになる.それではこのψの10という数はどこから出てきたのか?nとBは互素なので,(φ, K)=ψ=Kになっているのだが…いや,この値は計算で得たものではなく,探索によって得られたものだ.ともかく,この辺りはもう少しじっくり調べる必要がある.

コメントを残す

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

CAPTCHA