読者です 読者をやめる 読者になる 読者になる

123て8進法でいくつ?

APL/J言語

123(ひゃくにじゅうさん)は10進法で123です。
123は3が入っているので2進法や3進法ではありませんが、可能性としては4進法以上のn進法での数である可能性があります。
というわけで123に限ったわけではありませんが、数字列をn進法でいくつだろうと思うことがあります。
また、10101って2進法でいくつ?
というのも同じ課題です。
n進法のnを桁数分乗じて足していけば答えが出ますので、そんなに難しい問題ではありません。
たとえば10101が2進法ならば

   2^4 + 2^2 + 1 = 16 + 4 + 1 = 21

ですし、3進法ならば

   3^4 + 3^2 + 1 = 81 + 9 + 1 = 91

123が8進法ならば

   1*8^2 + 2*8^1 + 3*8^0 = 64 + 16 + 3 = 83

になります。(8のゼロ乗は1です。)
桁数を増やして12345をabcdeと書き表すとすると

  a * x^4 + b*x^3 + c*x^2 + d*x^1 + e*x^0

という多項式のxにn進法のnを代入した結果が求める数です。


さて、APL/J言語では多項式をあつかうp.(ピードット)という便利な関数がありますが、係数の並べ方が次数の少ない順なので、今回の目的に合いません。そこで|.(たてぼうドット、トランスポーズ)という数列の順序を逆にする関数を用いて次のような関数を作れば今回の目的に合ったものになります。

   pd=: |.@ [ p. ]
   1 0 1 0 1 pd 2
21
   1 0 1 0 1 pd 3
91
   1 2 3 pd 8
83

これを使ってn進法のnが変化したときの変化を見ることができます。

   1 2 3 pd 3 + i.10
18 27 38 51 66 83 102 123 146 171
   1 0 1 0 1 pd 2 + i.10
21 91 273 651 1333 2451 4161 6643 10101 14763

ちょっとおもしろい数列だと思います。


以上