2
高校数学解説
文献あり

N進じゃない位取り記数法

444
0

はじめに

 この記事では位取り記数法について私なりに色々考えてみた話を紹介していきます。
 皆さんご存じのように私たちが普段2021とか3.1415とかのように数値を表すのに使っている記法は10進位取り記数法と呼ばれています。これは、平たく言うと、数字の各桁に10のべきを対応させた記数法となっています。
2021=2103+0102+2101+1100π=3.14=3100+1101+4102+d1d0.d1d2=+101d1+100d0+101d1+102d2+
 このように数字の各桁に何らかの値を掛けて数値を表す記法を位取り記数法といいます。位取り記数法は基本的に10進法や2進法というN進法
d1d0.d1d2(N)=+N1d1+N0d0+N1d1+N2d2+
として使われるのが一般的ですが、そろばんの二五進法
01|12|02|13=(05+1)103+(15+2)102+(05+2)101+(15+3)100
(|で各串の境界を表し、左の数字が天、右の数字が地の状態を表すものとした)や時間を表す記数法
11:30:25=(110+1)602+(310+0)60+(210+5)
など少し変則的な記数法も使われています。
 数学クラスタではしばしば位取り記数法の各桁にある数列を整列させたり、各桁を並べ替えたりして遊ぶようなことがあります。
111111=37111337123(29)=321(17)
でもこういうのって大体10進法やN進法止まりで、もっと一般の記数法で遊ばれることは少ないように感じます(尤も専用の記法がないだけで実質的に変則的な記数法で遊んでいることもありますが)。それはちょっともったいない気がしたので私なりにN進じゃない記数法について軽く考察してみることにしました。

位取り記数法

定義

 まず位取り記数法に求められる要件について定めておきましょう。

 単調増加な正整数{Ak}と非負整数{dk}(0dk<ck)について
+A2d2+A1d1+A0d0=:d2d1d0(A)
のように表すことをA進法と言う。

 とりあえず非負整数を表現できるものとして次のような性質は欲しいです。

 任意の非負整数nn=d2d1d0(A)(0dk<ck)と一意的に表せる。

 この条件と単調増加性からAk未満の任意の非負整数n
n=dk1d2d1d0(A)(0dl<cl)
のように書けるので
Ak=1+l=0k1Al(cl1)
である必要があります。特に漸化式
Ak+1=Ak+Ak(ck1)=ckAk
が成り立つので1=d0(A)=A0d0と表せることからA0=1に注意すると
Ak=l=0k1cl
であればよいことになります。よって以下のようにまとめられます。

A進法

 任意に整数列{ck}(2ck)を取って
Ak=l=0k1cl
と定めたとき、任意の非負整数n
n=d2d1d0(A):=+A2d2+A1d1+A0d0(0dk<ck)
のように表現することをA進法と言う。このような表現は一意的であり、その表現をA進展開と言う。
 またckのことをk番位のまたは基数といい、各桁の値dkk番位の仮数と言う。

 代表的な位取り記数法であるN進法は
{c0,c1,c2,}={N,N,N,}
そろばんの二五進法は
{c0,c1,c2,}={5,2,5,2}
時間を表す記数法は
{c0,c1,c2,}={10,6,10,6,10}
もしくは時分秒をそれぞれ一桁とみなし日や年まで考えると
{c0,c1,c2,}={60,60,24,365,10,10}
のような場合となっている。

 私たちが普段使っている記数法が上手くいってるのは
Ak=l=0k1cl
というカラクリがあったんですね。
 ちなみに負の方向にも
Ak=1ckA(k1)=(l=1kcl)1
と伸ばして
r=d1d0.d1d2(A)=+A1d1+A0d0+A1d1+A2d2+
と表すことで任意の有理数や実数まで表現することができます(仮数は0dk<ck)。

簡単な性質

仮数の決定

 ある非負整数nが与えられたときそのA進展開は次にようにして求められます。
 まずc0から順に割り算をして行き、商と余りを求めます。
nc0=q0r0q0c1=q1r1q1c2=q2r2qk1ck=0rk
このときnA進展開はn=rkr2r1r0(A)となります。

20217=28852887=411417=5657=052021=5615(7)

 また一般の非負実数rの小数部分f=r[r]については以下のように求められます。
 まずc1から順に掛け算をして行き、整数部分rkと小数部分fkを求めます。
c1f=r1+f1c2f1=r2+f2c3f2=r3+f3
このときf=r[r]A進展開はf=0.r1r2r3(A)となります。

π=3+0.151490.1514=1+0.274390.2743=2+0.469090.4690=4+0.221090.2210=1+0.9894π=3.1241(9)

四則演算

 足し算引き算についてはN進法の場合とやることは変わりません。足し算
d2d1d0(A)+e2e1e0(A)=f2f1f0(A)
dkek(と繰り上がり)の和がck未満のとき
fk=dk+ek(+繰り上がり)
とし、ck以上のとき一桁繰り上がって
fk=dk+ek(+繰り上がり)ck
とするだけです(引き算についても同様)。
 掛け算割り算についてはおそらく特に一般的な方法がなく、かなり煩雑なことになります。せめて任意のi,jにあるki,jが存在してAiAj=Aki,jのような関係が成り立ってくれているとある程度の定式化はできそうですが、おまけとして示すようにそのような性質を持つものはN進法(に類似するもの)のみに限られることがわかるのでどうしようもないです。

約数判定

 10進法ではある数が2k5kで割り切れるか調べるには下k桁が2k5kで割り切れるかどうかを確かめればよい、という約数判定がありました。
232823102853125531125

これは一般のA進法でも似たようなことができます。と言っても至極単純なことで、ある数がd(dAk)で割り切れるか調べるには下k桁がdで割り切れるかどうかを確かめればよい、という話です。漸化式Al+1=clAlが成り立っているので当然と言えば当然ですね。ついでに言うと合同式
d2d1d0(A)dk1d2d1d0(A)(modd)
が言えます。

階乗進法と問題点

 というわけでN進じゃない記数法を考えてみましょう。とりあえずck=k+2とした階乗進法
d2d1d0(!)=d23!+d12!+d01!
なんてものを考えたくなります。階乗進法では一桁増えるごとに階乗n!の速さで大きくなるので、十分に大きい同じ数を表すのに指数関数Nnの速さで大きくなるN進法より少ない桁数で済みます。ただN桁程度のN進数だったら階乗進法で表すよりN進法で表した方が少ない桁数で済むのでよっぽど大きい数じゃない限り実用性は低そうです。
100000(3)=20011(!)(65桁)
100000=23551220(!)(68桁)
1030=37MFCDG58464CF8BC01182251220(!)(3128桁)

小数展開

 階乗進法は小数展開に少し面白い性質があります。
d0.d1d2d3=d0+d12!+d23!+d34!+(0d01,0dkk)
N進法においては大抵の無理数に対し、それが恣意的に作られたものでなければ、その小数展開に目に見えた規則性はありませんが、階乗進法においては規則性が見られる場合があります。
e=2+n=21n!=10.11111(!)sinh1=1+n=11(2n+1)!=1.010101(!)cosh1=1+n=11(2n)!=1.101010(!)e1=n=02n(2n+1)!=0.020406080A(!)sin1=n=0(4n+1(4n+2)!+4n+2(4n+3)!)=0.120056009A(!)cos1=n=0(4n(4n+1)!+4n+1(4n+2)!)=0.1004500890(!)
このように整数係数なマクローリン展開を持つ関数の特殊値といった限られた場合くらいにしかこのような性質は見られませんが、ネイピア数eのような馴染み深い超越数がこのような規則的な小数展開を持つのは中々面白いですね。

問題点

 ただ階乗進法には実用的にちょっと問題があります。上でもしれっとAとかBとか出てきたように上や下に10桁以上伸びる数を表現するには0から9までの数字だけでは足りなくなってしまいます。そこで32進法などでも使われているように9の先にA,B,C,Zと延長することで0から35までの仮数を一桁で表すことができますが、それでも上や下に36桁以上伸びる数を表現するには足りません。そう、階乗進数ではk桁目の仮数はk個必要なのですべての自然数に対してなんらかの記号を割り当てないといけないのです。
 じゃあ二桁以上使って仮数を表わせばいいじゃんとなりますが、10進法で表すにしても
12!1={11}{10}87654321(!)
のようになりますし、階乗進法で表すにしても
6!1={21(!)}{20(!)}{11(!)}11(!)
のようにかなりわかりづらい見た目になってしまいます。
 このように仮数が無限に必要になる問題を防ぐにはckが有限である必要があり、特に仮数をA進法で表したとき二桁以上になってしまう問題を防ぐにはckc0である必要があります。c0を固定したとき、ckc0を満たすような記数法のうち、桁数の増加に伴う発散速度が一番大きいもの(任意の数を表すのに一番桁数が少なくて済むもの)はN進法(N=c0)となるのでそういう意味でN進法は最も理に適った記数法であると言えます。

まとめ

 N進法は掛け算割り算が定式的に計算可能で、仮数が有限である記数法のうち実用的に最も理に適った記数法なので、いくら未知の文化を発展させた宇宙人が飛来してきても記数法はN進法に則ったものを使っている可能性が高いですね(ローマ数字のようなものを使っていない限り)。
 N進法最強!N進法最強!

おまけ

掛け算の法則とN進数

 一般の位取り記数法における掛け算割り算について「任意のi,jにに対しあるki,jが存在してAiAj=Aki,jのような関係が成り立つものはN進法(に類似するもの)のみに限られることがわかる」といったことを言いましたが、ここではそのことについて解説していきます。
 Akは単調増加なのでAi1<Aj<Ai+1ならばAj=Aiが成り立つことを利用すると次のようにして
=c2=c1=c0=c1=c2=
すなわちこれはN進法(N=c0)であることが言えます。

cl=c0(=c1)であること

 cl1=c1が成り立つとする(l=0のときは明らか)。
 このとき
Ak=A1Al+1=clcl1c1Al1=clAl1
なるkを取ると、A1<1<clよりAl1<Ak<Al+1つまり
Ak=Al=cl1Al1
でなければならないのでcl=cl1=c1を得る。

cl1=c0であること

 cl=c0が成り立つとする(l=0のときは明らか)。
 このとき
Ak=A1A(l+1)=c0cl1clA(l1)=Al+1cl1
なるkを取ると、1cl1<1<A1よりAl1<Ak<Al+1つまり
Ak=Al=Al+1cl
でなければならないのでcl1=cl=c0を得る。

整数の掛け算がしやすい記数法

 さて数学的帰納法によりAk=Nkがわかりましたが、これは前提としてAiAj=Aki,jという関係式においてi,jが負の値を取ることを許しています。
 ではi,jが非負のときのみを考えるとどうなるでしょうか。

{c0,c1,c2,}={49,7,7,7,}
つまりAk=7k+1(k1)とおくと
AiAj=Ai+j+1(i,j1)
が成り立つ。

 結論から言うと以下のような命題が成り立ちます。

 i,j0に対しあるki,jが存在しAiAj=Aki,jが成り立つことと、以下の二条件が成り立つことは同値である。

  • Akはある自然数NのべきNekとして表せる。
  • 任意のi,jに対してあるki,jが存在しei+ej=eki,jが成り立つ。

 このように結局N進法に類似した記数法となるわけです。
 ちなみにこのようなAkに対して集合
M={ekkZ0}
ei+ej=eki,jMと和について閉じており、またe0=0Mと加法単位元も持っているのでこれはモノイドと呼ばれる集合の一つとなります。特に非負整数Z0の部分モノイドであるので自然数モノイド(numerical monoid)と呼ばれます。詳しくは 英語版Wikipedia を見てください。
 また先に示したようにk,i,jが負のときにもAk=Nek(ただしk<0ならばek<0)が成り立ち、ei+ej=eki,jという関係があるならばek=e1kが成り立つのでしたが、これは有理整数環Zの(加法についての)部分モノイドで負の数と正の数を同時に含むようなものI={ekkZ}Zの(単項)イデアルであるということを示唆しています。

 k0=0,kl+1=k1,klとおく。このとき
Akl=A1Akl1=A1lAk0=c0l

kl+2kl+1=k1,kl+1k1,kl=k=klkl+11(k1,k+1k1,k)k=klkl+111=kl+1kl()
が成り立つことに注意する。

k1,k+1k1,kの一定性

 いまAkl+1=c0Aklから
c0=k=klkl+11ck
が成り立つのでc0=p|c0pepと素因数分解すると
kl+1klp|c0ep
と有界であり、したがってkl+1klはあるLから先lLで一定とならなければならない。
 また()の等号成立条件からkkLにおいて
k1,k+1k1,k=1
が成り立つこともわかる。

ckの一定性

 いまlL,kkLにおいて
kl=al+b,k1,k=k+a
とおくとAk+a=A1Akck+a=ckが成り立つ。特に
ckl+s(s=0,1,a1)
lに依らず一定となるのでその値をCsとおく。
 ここでAkl=c0lよりAkl2=Ak2lとなることに注意すると、あるksが存在して
Aks=Akl+1Akls=C0AklAklk=1sCak=C0Ak2lk=1sCak=C0Ak2ls
が成り立つ。このときks=k2ls+1とすると(s=0のときは明らか)
Aks+1=C0Ak2ls1=C0Ak2lsCas1=Ak2ls+1Cas1
より
Ak2ls1<Aks+1<Ak2ls+1
つまりks+1=k2lsとなることがわかるので、数学的帰納法により
Ak2ls+1=C0Ak2ls
を得る。

結論

 特に
C0=C1==Ca1
が成り立つのでこれをNとおくとあるKより先kKにおいて
Ak+1=NAk
が成り立つことがわかり、また任意のkおよびkKに対しkk,k=k+eとおくと
AkAk=Ak+e=NeAk
が成り立つので
Ak=Nek
と表せることが示された。

 我ながらこんな証明よく考えたなーと思います。
 まあとにかくN進法ってよくできてるんだなーって思いました。

階乗進法のレピュニット

1(!)=111(!)=3111(!)=9=321111(!)=33=31111111(!)=153=3217111111(!)=873=32971111111(!)=5913=347311111111(!)=46233=3211467111111111(!)=409113=321313471111111111(!)=4037913=32114078711111111111(!)=43954713=3211443987111111111111(!)=522956313=3211223208791111111111111(!)=6749977113=32118218304711111111111111(!)=93928268313=32112789340183111111111111111(!)=1401602636313=32111075092599491111111111111111(!)=22324392524313=321122549891438711111111111111111(!)=387011820620313=3211163201431162943111111111111111111(!)=6780385526348313=32111972734718275811111111111111111111(!)=128425485935180313=32112943162164175100111111111111111111111(!)=2561327494111820313=321125367662348503367

何かありそうと思いましたが特に何もなさそうでした。N進数のレピュニットが
k=0nxk=xk1x1
x=Nを代入したものだったのに対して階乗進数のレピュニットは
k=1nxk=x+x(x+1)+x(x+1)(x+2)+
x=1を代入したものとみなせます(xkは上昇階乗)。
k=11xk=xk=12xk=x(x+2)k=13xk=x(x+2)2k=14xk=x(x+2)(x+2+(x+1)(x+3))=x(x+2)(x2+5x+5)k=15xk=x(x+2)(x+2+(x+1)(x+3)(x+5))=x(x+2)(x3+9x2+24x+17)k=16xk=x(x+2)(x+2+(x+1)(x+3)(x+5)2)=x(x+2)(x4+14x3+68x2+131x+77)k=17xk=x(x+2)(x+2+(x+1)(x+3)(x+5)(x+5+(x+4)(x+6)))=x(x+2)(x5+20x4+151x3+529x2+833x+437)k=18xk=x(x+2)(x+2+(x+1)(x+3)(x+5)(x+5+(x+4)(x+6)(x+8)))=x(x6+27x5+290x4+1571x3+4458x2+6107x+2957)k=19xk=x(x+2)(x+2+(x+1)(x+3)(x+5)(x+5+(x+4)(x+6)(x+8)2))=x(x+2)(x7+35x6+505x5+3870x4+16860x3+41164x2+50819x+23117)k=110xk=(x+2+(x+1)(x+3)(x+5)(x+5+(x+4)(x+6)(x+8)(x+8+(x+7)(x+9))))=x(x+2)(x8+44x7+819x6+8387x5+51379x4+191167x3+416230x2+473387x+204557)

うーん。

参考文献

投稿日:2021422
更新日:2024512
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

子葉
子葉
1079
264093
主に複素解析、代数学、数論を学んでおります。 私の経験上、その証明が簡単に探しても見つからない、英語の文献を漁らないと載ってない、なんて定理の解説を主にやっていきます。 同じ経験をしている人の助けになれば。最近は自分用のノートになっている節があります。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 位取り記数法
  3. 定義
  4. 簡単な性質
  5. 階乗進法と問題点
  6. まとめ
  7. おまけ
  8. 掛け算の法則と$N$進数
  9. 階乗進法のレピュニット
  10. 参考文献