Log of ROYGB

はてなダイアリーが廃止されるので、引っ越しました。

八進法万歳

7で割り切れるかどうか簡単にわかる方法が無いというのは6日にも書きましたが、十進数でなければ簡単にわかる場合もあります。
七進数だったら7で割れるかどうかは簡単ですが、そんなのあたりまえです。それに七進数を使うメリットはあまり思いつきません。http://onisci.com/777.htmlの「七進法万歳」で書かれているように、円周率を表すのに便利というのくらいでしょうか。ちなみに円周率を七進数で表記すると良いというのは、円周率の近似で22/7というのが使われているのから思いついたのでしょうか。22/7を帯分数にすると3と1/7になり、小数表記だと7.1だからです。他に355/113という近似もありますが、これを使うには百十三進法にしないとだめなのでかなり無理があります。ちなみに113進法の3.G*1は十進法の小数点以下6位までと同じ正確さです。
それ以外だと、日付が七進法なら便利かもしれません。2日が月曜日なら12日も月曜日となるからです。時間で十二進法を使っているように、日付で七進法を使うという可能性もあるかもと想像しましたが、その場合は曜日がなくなっていたでしょう。

七進法以外だと、八進法も7で割り切れるかが比較的簡単にわかります。これは十進法で9で割り切れるのが比較的簡単なのと同じです。それぞれの桁の数字を足していった数が9で割り切れれば、もとの数も9で割り切れるというものです。これは10を9で割った余りが1になることが理由です。一般にn進法の場合に、n−1で割り切れるかどうかは各桁の数字を足した数から判明します。
つまり八進法で表記された数の各桁を足した数が7で割り切れれば、もとの数も7で割り切れるということです。これだけだと、八進法というあまりなじみの無い進法での技にすぎません。
しかし八進法というのは二進法を3桁づつ区切ることで簡単に変換することができます。二進法の3桁では0から7までの数を表すことが出来るからです。

実際にいくつか試して見ます。
133が7で割り切れるか確かめるのにまず二進数に変換します。八進に変換しやすいよう三桁ごとに区切りをいれてます。
10,000,101
これを八進数に変換します。
205
各桁を足します。
2+0+5=7
7は当然ながら7で割り切れるので、133は7で割り切れることがわかります。

以下は説明を省いて十進、二進、八進表記を並べます。


十進 2179
二進 100,010,000,001
八進 4201


十進 2219
二進 100,010,101,011
八進 4253


十進 3584
二進 111,000,000,000
八進 7000


すべて7で割り切れるのはそういう数字を選んでいるからですが、これでなんとなく八進法を使って7で割り切れるか判断する方法が実感できるのではないでしょうか。
わざわざ二進数に変換しているので単に割り算をするのよりも大変かもしれませんが、もともと二進数になっている数だとメリットがあるのかもと考えました。具体的にはコンピュータは二進数を使っていてこれを八進数にするのは楽なので、7で割り切れるかどうかもわりと簡単にわかります。
つまり、ある数が7で割り切れるかどうかというのをコンピュータのプログラムで判別する場合には、普通に計算するよりも簡単な方法があるということになります。

人間の場合も八進法もしくは二進法を使うことで、7で割り切れるかを十進法の場合よりも簡単に判断できるのでしょうか。7で割り切れるかどうかというのが必要な場合はあまり無さそうですが、曜日を求める場合は7で割り切れるかまたは余りがいくつになるかを計算する方法があります。何年何月何日が何曜日かということを普通に計算するよりも楽に求めることもできるわけです。楽と言っても暗算で求めるのはかなり難しそうですが、ソロバンによって計算能力が向上するのと同じようなことを二進や八進のソロバンで行うことが出来たらなどと想像は広がります。

二進法から容易に変換可能なのは八進法だけではありません。2桁区切りで四進法にすれば、3で割り切れるかが容易にわかります。4桁区切りの十六進法なら15、そして3や5で割り切れるかの判別が可能。そして当たり前ながら2で割り切れるかどうかは簡単にわかります。これらを組み合わせると、2から10までの数のほとんど*2で割り切れるかどうかが容易に判別できます。
さらに円周率の任意の桁を比較的簡単に求める方法も、二進法でならばあります。コンピュータが二進法を使っていることも含めて、世の中二進法をベースにした方が良いようにも思えてきます。
ちなみに2進法で円周率を表記するとこうなります。
11.001001…
小数点以下6位まで使えば3.14と同じ程度の
制度が得られます。この場合の問題としては001001と繰り返すので円周率が循環小数だと誤解される可能性があることぐらいでしょうか。
もう少し下の桁まで書くと、
11.0010010000…
となり今度は有限小数と誤解されるかもしれません。

*1:Gは16を表す記号として使っています。

*2:全てではないのが残念なところ。