6桁同士の掛け算が暗算でできるようになる平方数の話

6桁同士の掛け算が暗算でできるようになる平方数の話
Pocket

4月はじめ、会社員。新鮮さを失った季節の幕開けに相応しく体調を崩して寝込んだ数日間に、僕は平方数を数えて眠りに入ろうとしていた。

一般人が自然数を数えて眠る一方で、僕は平方数を好んで使っていた。平方数を利用すれば特定の掛け算が高速に処理できるようになることが好きだったし、素数のランダムな美しさとはまた違う規則的な羅列が綺麗だと思った。

大学受験の直前、単語カードの表に100未満の数字を裏側にその平方を書いては、さも英単語を覚えるかのようにめくる姿は危うく奇人に見られた。

ただし当時を思い返せば、平方数の法則性と暗記術において十分な理解ができていなかったことも多く、それが幾多の年を超えてより深い洞察と理解を伴ったと感じるのが今である。

計算術や美しい数の特性について文章に残していた過去の自分に背中を押され、久しく電子の筆を執る。

常識 : 1桁の平方

平方数を数えよう。初めの段階ではランダムに平方数を見るのではなく、1から順番に数え上げるのを複数回試すのが効果的である。そうすれば、いくつかの法則性を身をもって感じることができるし、平方数に対する感覚が研ぎ澄まされるだろう。とりあえずは99までの数の2乗について繰り返し反復すればよいだろう。

\(0^2= 0\\
1^2=1\\
2^2=4\\
3^2=9\\
4^2=16\\
5^2=25\\
6^2=36\\
7^2=49\\
8^2=64\\
9^2=81\)

1桁の平方を数え終わったときにまず気がつくのは、これらの下1桁は0,1,4,9,6,5の6通りしか存在しないということである。

全ての数は\(\{自然数\} \times 10 + \{1桁の自然数\}\)と表されるから、全ての平方数の下1桁は0,1,4,9,6,5の6通りしか存在しないということがわかる。

どれだけ大きな数についても、下1桁の数を確認すれば、平方数の判定ができる。

これだけでも、例えばとても巨大な数「11111111111111111111113」が平方数か?という問題に対して即答でNoと答えることができるだろう。

教養 : 2桁の平方

2桁の平方は10から31の100から961までが3桁で、32から99の1024から9801が4桁である。4桁の数には親近感と広い可能性を秘めた魅力が両立するため、2桁の平方に触れることは個人的にはとても楽しくて興味深いこととなる。

実は0から100までを2乗した時に、下2桁のパターンは22通りしかない。それも、0から25の26個の平方のうち、0, 10, 20の「00」と5, 15, 25の「25」の重複している4通りを抜いた22通りである。

26から100までの数の平方の下2桁を考えよう。まず、26から50までの数であるが、これらをすべて「50 – {0から24}」の数と考えると、2乗した時に、

\(2500 – 100 \times \{0から24\} + \{0から24\} ^ 2\)

となるため、下2桁は0から24の平方の下2桁と同じ22通りとなる。

同様に、50から100の平方を考えると、これらをすべて「50 + {0から50}」の数と考えると、2乗した時に、

\(2500 + 100 \times \{0から50\} + \{0から50\} ^ 2\)

となるため、下2桁は0から50の平方の下2桁と同じ22通りとなる。

 

下1桁を考えていた場合には、平方数ではないと即答できる割合は10個の数のうち4個であったため、弾ける確率が40%であった平方数判定も、下2桁に拡張することによって、100通りの下2桁のうち78通りは弾くことができるようになり、実現可能な人間の力を使って78%もの確率で瞬時に非平方数弾けるアルゴリズムに進化する。

よって、2桁の平方に関する感覚を研ぎ澄ます練習を数日間行えば、例えば「11111111111111111179」が平方数か?という問題に対しては即答でNoと答えることが出来る。

平方数判定のアルゴリズムについて補足すると、10や100の剰余に拘らずとも同様の「余りを見ることで平方数である可能性を弾く概念」は使うことができるので、人間の計算力を上回る計算機の世界では、最適な割る数を選択するとより軽い計算量でより優秀な判定ロジックを生み出すことができ、実際に256で割った余りの2乗が44通りしかないことを使用した平方数判定アルゴリズムなどが実用化されているようだ。

なお、平方数を数える目的は、平方数の判定ロジックという副産物的な事象ではなく、もっと純粋な「綺麗な数を見つけたい」という点にある。

例えば1089は33の平方で、9801は99の平方だが、これらは逆さまから読めばお互いの数になるという、名付けるなら「逆立ち平方数」を僕は見つけることが出来た。さらに144は平方数だが、1444も平方数というのも数字の並びが興味深い。44というペアの並びの関連でいうと、3844, 7744, 4489, 5776, 6889, といった平方数もペアが現れて綺麗だと感心する。

綺麗な数の法則を見つけるコツは、どうしたらこの数をずっと覚えていられるだろう?と考えることではないかと思う。その点で2桁の平方を全て覚えてしまうことはとても有意義なことであると感じた。

そして、2桁の平方を全て暗記するという行為は、より大きな平方の暗算にも役に立つという発想が、僕の頭に舞い降りてきた。

ここで、実際に2桁の平方の覚え方についてたくさんの方法を僕は思いついたが、記事の中で詳細に伝えたとしてもあまり効果的には思えないため、平方数に対する感覚は各々が自由に感じ取れば良いと思った。

いくつかヒントを書いておく。

上の2桁と下の2桁に分けて覚えること。上の2桁については例えば前後の平方数と比べて繰り上げがどうなっているかに着目すること。ある数 x の平方に対して、50 – x, 50 + x, 100 – x の平方の値を関連させて覚えること。そして親しみを持って数字の羅列を受け入れることである。

応用 : 3桁の平方

2桁までの平方数の暗記とは打って変わって、3桁以上の平方に関しては、どのようにして頭の中だけで計算しうるかということが重要な問題となった。

例えば489という数が与えられた時にいかにして\(489 ^ 2\)を高速に暗算するか、ということである。

この時、通常筆算をするときのように展開して考えることは、頭の中の記憶容量がなくなって暗算初心者に優しくない計算法となる。

だが、89の2乗が7921となることが反射的にわかるようになった体を仮定すると、この暗算はずいぶんと楽になる。

方法としてはまた分配法則を使うだけで、まず489を4, 89と下2桁を分離して考える。理論的には \((4 \times 100 + 89) ^ 2\)をするわけである。

まずは頭の中で4*89*2をする。これは712であると暗算できるだろう。

次に712 + 79 (7921の下2桁の21を除外)を考える。これも791であると、暗算は容易いだろう。

この791は頭の中で唱えたまま、791の下2桁(91)を除外した7と4の2乗である16を足し合わせる。16 + 7 = 23。

あとは23と除外した91と除外した21をつなげると答えである239121が出てくる。

(↓イメージ図)

このように、2桁ずつ区切って考えることができるのが、この計算方法の素晴らしさである。この方法によって、3桁の平方に関して言えば全ての数に対して暗算で値を求められることが実感できるだろう。

挑戦 : 4桁の平方

4桁の平方に関しても基本的な作戦は3桁と同様である。例えば8789という数の2乗を考えてみる。

87の2乗が7569であり、88の2乗が7744であり、89の2乗が7921であることは、瞬時に頭の中から出てくることは今回も前提となる。

まず、8789を87, 89と2桁ずつに分解する。一番の難所が\(87 \times 89\)の部分であるが、これは \((x + y) \times (x –  y) = x ^ 2 – y ^ 2\)となることを利用して、x = 88, y = 1 を代入すると7743であることがわかる。これを2倍して15486にする。2倍は忘れやすいので気をつけよう。

次に15486 + 79 (7921の下2桁の21を除外)を暗算ですると、15565となる。

次に7569 +  155 (15565の下2桁の65を除外)を暗算ですると、7724となる。

7724に除外した数 65, 21を順番に繋げると77246521となるが、これが8789の平方である。

実際に暗算ができるようになればわかるが、暗算を通して覚えておくべき数が5桁以内であるため、短期記憶があまり得意でなくても、暗算でも意外と解けることがわかる。

ただし、今回は\(87 \times 89\)であった2桁同士の掛け算をどんな数に対しても暗算でできるようになるには少し難易度が高いため、4桁の平方の暗算の難易度は高めである。

限界 : 5桁の平方

暗算が得意なわけでもない僕が4桁の平方を暗算でできるようになっていた衝撃に感化された僕は、「凡な暗算能力でも工夫を凝らせばどれだけの演算能力を手に入れられるだろう」と考えるようになった。

そして5桁に挑戦する。5桁の場合は4桁の場合以上にシンプルに短期的な暗記能力が必要となる。

例えば38789の平方を考えよう。5桁の場合は下4桁で区切るのが1番安定すると感じた。8789を先述の方法で暗算して77246521と求める。この数を4桁で分割した7724と6521を頑張って短期的に覚える。8桁の暗記なので、携帯電話の番号ぐらいだ。集中して頑張れば覚えられるだろう。

次に\(3 \times 8789 \times 2\)を暗算する。52734だ。

次に52734 + 7724を暗算する。60458だ。

そして3の2乗である9に60458の下4桁である0458を除外した6を足して6 + 9 = 15を得る。

15, 除外した0458, 頑張って覚えた6521を最後に繋げて、1504586521となる。

ミスなく計算するのは難しいかもしれないが、5桁の平方数の暗算は意外と時間をかければ可能になる。ここまでが現実的に自由な数に対して暗算ができる僕の現在の限界である。

未知 : 6桁の平方

6桁の平方に関しては割と強めの条件と数分程度の長い時間を要するが、何問かチャレンジすると正解はできることがわかったので、記事に載せることにした。

例えば489489という、同じ3桁の繰り返しである。6桁の場合は、3桁ごとに区切るのがやりやすいだろう。

489489の2乗を暗算で計算してみよう。まず489の2乗は239121であることは上で求めた。この6桁の数は頑張って覚える。分割して239と121で覚えると良い。

そして、239121の2倍を求める。478242である。これを3桁ずつに分けると478と242である。この数も覚える必要がある。合計すると12桁を覚える必要があるのが6桁の平方の難しいポイントだ。

242 + 239 = 481, 121 + 478 = 599 と、足し算をしていき、上3桁の239, 計算で求めた599, 計算で求めた481, 下3桁の121を繋げた239599481121が答えである。

この辺りになってくると、文章だけの説明が難しくなるので、実際にやってみると掴む感覚も大きいと思う。

ただし489489の2乗の暗算というと、6桁同士の掛け算とはいえ、何かトリッキーな仕組みを用いた感覚が強くなる。そこで、先程の\((x + y) \times (x –  y) = x ^ 2 – y ^ 2\)という式のx = 489489, y = 2などを使って、

\(489487 \times 489491 = 239599481117\)などを暗算でできるという風に言ってみると、なんだかすごい演算能力を手に入れられたような気持ちになって楽しいだろう。

平方数の差のパワー

\((x + y) \times (x –  y) = x ^ 2 – y ^ 2\)という数式を何度か挙げたが、この数式は特に2つの数の掛け算においてすごいパワーを秘めている。

この数式のおかげで3桁同士の自由な掛け算についても暗算で行うことができるようになるし、例えば双子素数同士の掛け算(2しか差がない素数のペア同士の掛け算)についても高速に処理することができる。

さらに素因数分解において難易度が高いのは、値が近い2つの数によって構成される擬素数(素因数分解で素因数が2つのみである合成数)である可能性の排除であるため、暗算での素数判定にも寄与する。

例えば、4409が素数であることを暗算で判定する時に、20未満の素数に対しては割り切れないことが確認できたとしよう。すると、素因数は重複を含んで2つしかないことがわかる。

なぜならば\(20 \times 20 \times 20 = 8000 > 4409\)となり、重複を含んで素因数を3つ持つことは、その素因数が20以上であることに矛盾するからである。

よって、もしも4409が素因数分解できたとすると、それは素数の平方か擬素数である。66の2乗が4356であり67の2乗が4489であることを考えると4409は平方数ではない。

続いて、4409が擬素数である可能性の排除をしよう。4409が擬素数であると仮定すると、\(4409 = 平方数 – 平方数\)と表されることとなる。(4409は2で割り切れないため奇数同士の掛け算であることがわかる)

よって、4409に平方数を足していき、その数が平方数となるかどうかを判断する。67の2乗が4489であり差が80のため、8の2乗までの平方数を足しても平方数にはなりえない。68の2乗は4624で差は215のため、14の2乗までの平方数を足しても平方数にはなりえない。69の2乗は4761であり差は352、平方数ではない、70の2乗は4900で差は491で平方数ではない。

こうして平方数との差を確認することによって、例えば上の例だと4409に22の2乗である484を足しても平方数にならないことがわかったので、70 – 24である56以上の素因数を持たないことがわかる。

このようにして、ある特定の数が大きな素因数を持つかどうかが暗算で比較的容易に計算できるのである。

平方数の和の神秘

これまではずっと平方数の差に注目してきたので、では平方数の和に関してはどのような法則や理論があるのだろうかと考えるのも自然である。

これに関しては少し難易度が上がるが、例えばある数が平方数の和で表されるか?という問いがあり、これはガウス整数環という、整数を複素数空間に拡張したような集合の素元という概念を考えることによって判定が可能となる。

例えば素数pを考えると、pを4で割った余りが1なら、pは一意な平方数の和で表されるといったことが証明できる。

ガウス整数環の素元についても、整数環の素数のように、ある美しい理論を背後に感じることができるはずで、それをより身近に感じようというのは一つの大きな僕の中の興味の対象である。

 

Pocket