« 鏡は削って作れ! | メイン | テレビがパソコンみたいになってきた »
『月刊ascii』の連載「それは順序が逆だろう/Every thing is a system」で、表題の事柄についてここで触れると書いた。インドの算術のアレコレは、単行本まで出ているが、ロシアのかけ算についてである。
※写真は、飯田橋の「クラウンエース」のカツカレー。ときどき無性にこの手のカウンター式のカレー専門店に入りたくなる。ここの特長はなんといっても安い。カツカレーが480円。隣の常連らしい客がご飯の上にシソの実を敷き詰めていたのでちょっとだけ真似してみた。CoCo壱番屋より好き。
さて、ロシアのかけ算についてだが、1度、『月刊アスキー』に連載していた「近代プログラマの夕3」(Act.43/1999年12月号)で書いたことがある。科学雑誌などで、「ロシアのかけ算」(Russian multiplication)または、「ロシアの農民のかけ算」(Russian Peasant Multiplication)として紹介されたりするものだ。
やり方には、いくつかのバリエーションがあるのだが、まずかけ算する2つの数を間をあけて並べて書く(元の数を左、掛ける数を右)。そして、以下のように左を半分に、右を2倍にしていく。このとき、左が奇数のときだけ印(下の例では●)を付けていく(下では便宜的に偶数のときは○を付けておく)。
34○ 56
17● 112
8○ 224
4○ 448
2○ 896
1● 1792
これで●印のついた数値だけ加えてやれば,112+1792で,答えの1904が求められる。一見、かえって大変じゃないのというふうに見えるかもしれないが、とにかくこれで「九九」を知らなくてもかけ算ができる(数を半分にしたり2倍にしたりはできる必要があるのだが)。
ところが、これが何度かやってるとなかなか効率的な計算方法であることに気づいてくる。2倍したり2分の1したりする操作は、慣れるとどんどん速くできるようになるからだ。かけ算したい小さいほうの数を置くのがよいでしょう。
12○ 34
6○ 64
3● 136
1● 272
※12×34=136+272=408
何度もやっていると左の2分の1の操作はしなくても、右の2倍の操作の何回目と何回目を足してやればいいか覚えてしまう。「12」なら2回目と3回目だということを身体で覚えておけば、なんとアッサリ計算できてしまう。ちょっと練習してみよう。まず、左の数が2の例。
2○ 34
1● 64
※2×34=64
これが原点ですね。そこで、左の数を3にしてみましょう。
3● 45
1● 90
※3×45=45+90=135
要するに、2倍した奴にもとの奴を加えると3倍になるわけですね。これは、きわめて納得。それでは、4を掛けると。
4○ 56
2○ 112
1● 224
※4×56=224
「2回2倍すれば、それは4を掛けることになるでしょう」という突っ込みがきそうだが、実は、これがロシアのかけ算の本質を語っているともいえる。実は、左の数の●印の有無を上から2進法の1桁目、2桁目、3桁目……というふうに見ると、なんと左の数を2進法にした状態になるのだ。
ここまでの例でいえば、34は「●○○○●○」で2進法の“100010B”、12は「●●○○」で2進法で“1100B”、2は「●○」で2進法の“10B”、3は「●●」で2進法の“0011B”、4は「●○○」で2進法の“100B”である。
さて、すでにお気づきの方もおられるのかもしれない、このロシアのかけ算というのは、コンピュータがその内部でやっているかけ算と同じアルゴリズムなのだ! ということで、これは次号の『月刊ascii』(2008年1月24日発売号)の連載で触れることにしよう。それにしても、ロシアの農民たちがやっていたかけ算の方法が、コンピュータ内部のかけ算の方法と同じだなんて……「ロシアのかけ算」、誰かの創作でなければよいのだが。
※12×34の計算のところなんと間違ってしまっていた。「Gururiの日記」(http://d.hatena.ne.jp/Gururi/20080226/p3)さんに指摘されましたので修正いたしました。ご指摘有り難うございます。
東京カレーニュース
個人サイト(http://www.8-p.net)個人Twitter(http://twitter.com