循環単位数(recursion unit)Uは計算できるようになった

循環単位数(recursion unit)Uは計算できるようになった.これにnを掛けたnUがレピュニット(の整数倍)になることを確認する.この数はB進で表記したいのだが… notationにはnをB進表記した数が表示されている.⇒ConvertNum2Stringという関数があった.⇒計算はできるようになったが,話が少し違うような気がする.B=10の場合,N=3→9,6→36,7→999999,9→9,11→990,12→36,13→9999990,14→9999990,15→90,17→99999999999999990,18→90,19→9999999999999999990

N=7を除いて,すべて999…の末尾に0が付いている.中には6や12の場合のように,9の倍数ではあるが9の並びではない数字さえ出てくる.⇒明らかにこの末尾の0はゴミと考えられる.N=21, B=10のとき,MakeRecursionUnitはfixed=1, keta=6で呼び出される.このとき,QTには{0,4,7,6,1,9,0,0,}のような値が入っている.このfixedの1は冒頭の0のことで,そこから桁数分取ると476190になる.桁数は間違っていないと思うので,fixed=1というのが間違っているのだろう.つまり,476190ではなく047619なのだと思う.これは結局,InvertFunc → PowerResidueFunc がまた間違っていることを意味する.

ごく初期のバージョンを除いてすべて間違っている.正しく動作しているのは,「久留島喜内 2023-04-16」だけだ.このバージョンではまだRTはハッシュ化されていないので,R = RT(j)ならば,単純にfixed = jとしている.しかし,動作がかなり違うような気がする.RTには{1, 10, 16, 13, 4, 19}が入っていて,R=1を検索しているため,j=0でヒットしている.これに対し,現行版ではR=RT(0)を見ているため,R=10を検索する動作になっている.現行版ではRは{10, 16, 13, 4, 19, 1, 10}のように発生しているので,初項10から始まることになる.

旧版と現行版ではかなり大きな違いがある.旧版ではxがnを超えるまではパスする仕組みがある.いや,そもそもRT(0)が違うのではないか?確かにそれはあるが,RT(0)に1を書き込んでも変化しない.いずれにしてもRT(0)に対する書き込みには疑問がある.RTはハッシュテーブルだから,ハッシュ値が0になるということは当然あり得るのに,そこに先住者がいるというのはかなりおかしい.少し考え直す必要がある.

少なくとも現行版ではRT(0)を考慮する必要はない,というより,考慮するのは間違いだと言える.もし,初期値をどこかに格納する必要があるのなら,RT(0)ではなく,むしろRT(max)だろう.ここならどこからも届かない安全な置き場所だ.しかし,現行論理ではいきなり If R = RT(0) Then となる.かなりまずいと思う.

コメントを残す

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

CAPTCHA