nU/(B-1)という値にΞという名前を与える

現行ではnU/(B-1)の値にrepというラベルを付けているが,この数値はつねにレピュニットになるとは限らないので,正確とは言えない.多少うるさいが,直接nU/(B-1)と表記しておいた方が間違いがないのではないか?合わせて,rep値がレピュニッであるか否かを示すインジケータも表示しておきたい.昨日からEFAの読み直しを始めているが,レピュニット値を得られるか否かはnの素因数分解に深く関係している.

ある数rがレピュニットであることをどのように判定すればよいだろう?レピュニットはBに依存するので計算にはBが現れなくてはならない.r=(B^e-1)/(B-1)だから,r*(B-1)+1してB^eに戻せるかどうかを試してみればよいのではないか?いまの場合,eは未知だから,X=r*(B-1)+1として,B^log(X)=Xとなることを確認すればよい.いや,これは間違いだ.B^(logX/logB)=Xだ.Bを底とする対数を直接求めることは可能だろうか?x=logX / lobBを計算してやればよい.⇒できた!かなりわかり易くなった.⇒ダメだ.誤動作している.

n=29, B=5のとき,r=11111111111111がレピュニットでないと判定されている.doubleの計算なので誤差が出てしまっているのだろうか?x=13.999999999999998という値だ.CTypeで変換しているが切り捨てになっているのではないだろうか?⇒そのようだ.Math.Round関数を使うようにしてみた.Roundの引数で四捨五入を行う小数位を指定できるが,15とした場合には落ちてしまう.15桁目は8で,14桁目までは9が入っている.引数を14として動作したので,これでよいことにする.整数値で検算しているので問題ないはずだ.

ダメだ.n=73, B=29でr=11111111111111111111111111111111111111111111111111

1111111111111111111111 の数字をレピュニットでないと判定している.71.999999999999986を71にまるめている.⇒第二引数を12まで落としてみた.これで(B^e-1)/(B-1)の値を完全に検査できる.この値には何か名前が付いていただろうか?この値は結構重要度が高いので,何かギリシャ文字を与えてもよいのではないだろうか?⇒φ,ψときて,次はχではないか?しかし,文字面ではxと同じになってしまう.upsilonというのもある.nUの約数なのでΥもおもしろいと思うのだが,見た目がYになってしまう.Ξは横棒だが,一が3つ並んだ形状に見えるので,これを使ってみよう.つまり,上で「nU/(B-1)」と表記した値だ.Ξ=nU/(B-1)ということになる.⇒直感的で悪くないと思う.

このインジケータをチェックすると,nとBが互いに素であることと,Ξ値がレピュニット数であることは完全に同値であることが確認できる.これは大きな収穫だ.ダニエル・デジオジーとの対話の中で数字和(digit sum)の話が出てくる.どこか場所があれば出してみたいのだが… 数字根(digital root)というのもある.これは数字和を一つの数とみなしてその数字和を求め,のような操作を繰り返して一桁になったときの数字だ.nのB進表記を出すところでダンプ出力として出しておくことにしよう.DispInvertFunc→DispNotationで表示している.

Bを変えたとき,Bの因数とB進表記が変化しない.⇒対処した.

Bを変えたとき,何も外部出力されない.⇒暫定修正としてBottomLineを呼び出すようにした.

DispInvertFunc で循環節を重複して生成しているようだ.

DispInvertFunc→MakeRecurringDecimal→※→DispParametor2
DispInvertFunc | Inverse.Click→DispInvert→※

文字列の生成はMakeRecurringDecimalに統一し,DispInvertの中から呼び出せばよいのでは?いや,DispInvertFunc → DispInvertの呼び出しはDUMPNUMSTRINGの限られているから止めてよい.従って,

DispInvertFunc→MakeRecurringDecimal→※→DispParametor2
Inverse.Click→DispInvert→※

のようになる.つまり,DispInvertの論理をMakeRecurringDecimalの呼び出しに変えればよいのではないか?というか,DispInvertを廃止して,Inverse.Click→DispInvert→DispInvertFuncでもよいような気がするが… いや,そもそも,Inverse.Click→DispInvertFunc は実行されている.Inverse.ClickではDispInvertFuncの後に,DispInvertとDispRecurringDecimalを実行している.DispRecurringDecimalは出力画面に「循環小数」などの情報を出力している.これはDispInvertFunc に取り込んでしまった方が早い.⇒DispInvertは廃止した.

nRの計算が間違っているような気がする.K=14のとき,nR=14という値が表示されている.しかし,nRはn%KなのだからnR<14でなくてはならない.nRはKの剰余だが,少しだけ違うところがある.nR=0のときには,nR=Kとなるように調整してあるところが味噌だ.これによって,マトリックスの行番号とnRが一致するようになっている.eRの場合も同様の調整が入っている.2023-06-07のログによれば,

「たとえば,K=4のとき,e=3, 6, 9ではeRは0になるが,マトリックスの指標としてみる場合には0という数字は現れないので,eR=0 → eR=K-1のように換算する必要がある.nR=0にも同様の問題はあるが,行の場合は行ヘッダが表示されないので,剰余が1列目に表示されているが,それが0になっているので,特に手当しなくても問題ないようには見える.⇒縦軸は番号Nとみなすべきだから,やはりゼロは適当ではないと思う.eRの場合と同様0→Kのように読み替えるべきだ.」

のようになっている.驚くべきことは,nRと数字根は完全に一致する.ただし,すべてのKについてそれが成り立っている訳ではない.

上の修正の影響と思われるが,Kを変更してもnRが変化しなくなってしまった.いや,処理は抜けていないようだが,描画されないような状態になっている.何かタイミング的な問題があるのだろうか?Nが小さい範囲では問題は起きない.⇒ChangeCursorが入っていないため,処理が続いているのが見えていないことが原因と思われる.⇒対処した.

「nRと数字根は完全に一致」しているように見えたのだが,まったく起きなくなってしまった.少なくともK=45では一致していたと思うのだが…対象の数字を一桁小さくしたら一致するようになった.確かに数字根の計算には逆数演算が必要というか,そのカテゴリに含まれるが,逆数方面は上限がタイトなので動作しない場合があるのではないか?

べき乗の計算値やB進表記などをBottomLineで表示しているが,あまりよくないと思う.BottomLineは処理中に繰り返し呼び出されるので無駄な処理が入り過ぎる.DispParametor2に移してみよう.ダンプに紛れてしまうので読みづらい.ValueChangedの末尾に置いてみよう.

数字根がnRと一致する条件がわかった.K=B-1だ.つまり,B=10のときK=9の剰余はBの数字根と一致する.B=10,K=45では一部一致する場合もあるが,不一致となる場合もある.また,次のようなことも言える.「KがB-1の倍数のときは,B^x%Kは一定値を取る.」いや,一定にならない場合もある.たとえば,B=10でK=27では{1, 10, 19}の3つの値に分離する.しかし,K=36なら一定だ.おそらくBの因数をp1*p2*…として,(B-1)*p1*p2…などであれば一定になるのではないだろうか?Kの素因数分解も必要かも知れない.B(B-1)というのも気になる数字だ.循環節の書式を下記のように変更した.

A: 0.005|4347826086956521739130

とても読み易くなった.

Kを変えてもe%K-1が変化しない.stripeは変化している.⇒e<Kならば値は変化しないと思う.e>Kになれば変化するようになる.剰余演算ではつねにこのようなことが起こる.つまり,Kより小さい値は剰余演算ではほとんど意味がない.⇒というか,Kの範囲内でしか通用しない.

Bを変化させたとき,Bの因数と表記が変化しない.Bの素因数を表示しているのはDispNotationだけだ.DispNotationを呼んでいるのはValueChangedProだけだ.⇒base2.ValueChangedイベントでDispNotationを呼び出すようにした.

Nを変更して(n,K)が更新されない.この値を更新しているのは,DispModPowだけだ.⇒いや,呼び出されているし,更新もされている.1や7などの数字で色も地味なので見落とされていただけだ.

▲横数列が尽数列になっても,原始根マークが付かない.K=11のとき,ψ=K-1のときのみインジケータが点灯する.

コメントを残す

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

CAPTCHA