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

OGATA Tetsuji の数学ブログ

数学科卒の30代ウェブプログラマーが書く数学ブログ Powered by MathJax

九九の答え全部の和と、表形式のかけ算について

2016年の年末。帰省して実家でゆっくり休んでいる時に「2016年で思い出に残っていることって何だろう」と振り返っていたのですが、12月に入ってから見たパズル作家のたきせあきひこさんの以下のツイートを思い出しました。

最初何を言っているか分からなかったのですが、たしかに計算すると2016になります。

When sum of all multiplation table numbers is subt ...

プログラミングの練習問題にちょうどよい課題ですが、Perl プログラマの私はもともとは数学屋なのでもっとアルゴリズムを使うべきです。繰り返し構文で愚直に足すのではなく、高校1年生頃に習う自然数列の和の公式を使えばいいですね。

自然数列の総和公式で九九の答え全部の和を求める

「1 から 100 までの和はいくつですか?」と聞かれた場合、自然数列の総和公式を思い出せるかどうかが鍵となります。天才数学者ガウスの幼少時代の逸話としても有名な問題です。

これは

{ \displaystyle 1 + 2 + \dots + 100 }

と、それを逆に足すようにした

{ \displaystyle 100 + 99 + \dots + 1 }

を並べます。2つの数式から同じ場所の数をひとつずつ持ってきて足すと、それは必ず101になります。なので、2つの数式のすべての数を足すことは、101 を 100回足すことと同じになります。2つの数式はどちらも求めたい和ですから、それら全部の和は求めたい和の2倍となっているはずなので、2で割ることで答え  101 * 100 / 2 = 5050 を得ることができます。

一般に  1 から  n までの自然数の和  \sum_{k=1}^n k

{ \displaystyle \sum_{k=1}^n k = \frac{n (n+1)}{2} }

と書くことができます。

この公式を使うと、さきほど出てきた九九の答え全ての和は

{ \displaystyle \sum_{u=1}^9 \sum_{v=1}^9 uv }

と書くことができ、2つの総和記号  \sum は自分に関わる変数(ここでは  u v のこと)以外のものは外にくくりだすことができるので

{ \displaystyle \sum_{u=1}^9 \sum_{v=1}^9 uv = \sum_{u=1}^9 u \sum_{v=1}^9 v = \frac{9 \times 10}{2} \times \frac{9 \times 10}{2} = 45 \times 45 = 2025 }

と計算することができます。  2025 - 9 = 2016 であることは言わずものがな。

この計算の絶妙なところは、自分に関係のない項をくくりだすことができる総和記号の性質を使って、2つの総和記号が

 \sum_u \sum_v uv = \sum_u u \sum_v v

となることでした。

f:id:xtetsuji:20170118220220p:plain

理系学生にとっては何の変哲もない数式運用ではありますが、少し深掘りしてみましょう。

和と積の入れ替え、総和記号のくくりだし、分配法則

「九九の答え全部を足す」ことは「最初に81回かけ算をして、後で81個の数字を足し算する」こと、総和記号を入れ替えることは「最初に1から9までの足し算を求めておいて、それとそれをかけ算する」ことです。

つまり「かけてから足す」か、「足してからかける」か。足すことを和、かけることを積ということを思い出せば、「和と積の入れ替え」が「総和記号のくくりだし」に相当します。

それは、改めて上記の計算を(総和記号などを使わず)愚直に書けば

 1 \times 1 + 1 \times 2 + \cdots 9 \times 8 + 9 \times 9 = (1+2+3+4+5+6+7+8+9)(1+2+3+4+5+6+7+8+9)

そう、単なる分配法則に過ぎません。

「和と積の入れ替えは単なる分配法則です」だとあんまりなので、少しこの「表形式の積」を深掘りしてみましょう。

表形式の積の応用

この形式は先程考察した九九の表の一部だけでも当然成り立ちます。

たとえば  13 \times 13 = 169 について  6 7 で考察します。

f:id:xtetsuji:20170118220644p:plain

表を見ると  36 + 42 + 42 + 49 で、この和を計算すると  169 になっていることがわかります。これも  (6 + 7)(6 + 7) = 36 + 42 + 42 + 49 という分配法則に過ぎません。

もっとも、私たちは2桁のかけ算をするときのテクニックを小学校時代に学んでいます。

f:id:xtetsuji:20170118221113p:plain

この2桁のかけ算の方法、九九による1桁のかけ算を4回やっていることに気づきます。これは上記のような  6 \times 7 の表形式のかけ算の回数と一致し、十の位  1 へのかけ算は実際は  10 のかけ算であることに気づくと、以下の  (10 + 3)(10 + 3) = 100 + 30 + 30 + 9 の表形式に還元できることがわかります。

f:id:xtetsuji:20170118221515p:plain

この場合に限らず、単なる分配法則に過ぎないので、九九の表のように縦横がもっとたくさんあっても構いません

f:id:xtetsuji:20170118222210p:plain

し、縦横が別に同じ分割でなくても良いです。

f:id:xtetsuji:20170118222537p:plain

なんとなく2桁のかけ算への抵抗がなくなってきたのではないでしょうか(もともと無かった?それは素晴らしい)。

同じ数同士でなくてもいいので、例えば  101 \times 99 を解く場合、上記で述べた小学校で習うかけ算の方法の表形式バージョンは

f:id:xtetsuji:20170118222749p:plain

となり  9000 + 90 + 900 + 9 = 9999 となります。

もっとも、せっかく表形式のかけ算をやっているわけで、この場合は分割方法を工夫すると

f:id:xtetsuji:20170118222841p:plain

となって、 10000 + 100 - 100 - 1 = 9999 というような、うち2項の和がゼロになる若干見通しの良い和になります。積対象の分割した数にマイナスの数を入れても何ら問題はありません。

計算が得意な方はご存知ですが、これは以下の分配法則の式

 (a + b)(a - b) = a^2 - b^2

の暗算への応用です。

ここまでの結果は分配法則をどう書くかという書き方の違いでしかないといえばそうなのですが、 2桁以上の数同士の積、そして多項式同士の積を、上記のような平面的な視点で見直せることで、数式としての分配法則の理解がまだできていない中学生の学習の助けになるのではないでしょうか。

ここで終わりにするのも良いですが、この「平面的なかけ算」をさらに応用できないものでしょうか。

開平法への応用

平面といえば長方形や正方形です。長方形や正方形の辺の長さの積はその面積を指します。まさに今回の表形式のかけ算は、長方形や正方形の形をある意味描出しているようにも思えます。

単なる面積を求めるだけなら普通にかけ算をすればいいのですが、正方形の面積がわかっている場合に一辺の長さを求めるのにこの表計算方式が使えないものでしょうか。つまり面積  S に対して2次方程式

 { \displaystyle x^2 = S }

を満たす x  \sqrt{S} ですが(今回は長さと面積の話なので  x  S も正の数です)、この  \sqrt{S} の数値解を求めるにはどうすればいいかという話。

数値計算の世界では、平方根の記号を開けるという意味合いとして開平と呼ばれます。もっとも、Wikipedia の開平法のページを見ても正直複雑です。大昔の義務教育の算数・数学では開平法は扱っていたのですが、私の時代(四半世紀程度前?)では教科書の隅っこに「こういう方法がある」程度の扱いで、教師も触れなかった記憶があります。昭和末期はパソコンこそ無かったものの、既に平方根記号のボタンがついた電卓はそこらじゅうにあったわけで、わざわざ筆算で開平をする意義は失われていたといっていいでしょう。

ここでは  S = 23 とし、 \sqrt{23} を開平してみます。

当然ながら、見方を変えただけの表計算のかけ算でも、開平が複雑であることに変わりありません。

まず、 23 から引き算して負の数にならないギリギリの自然数の二乗を探します。  5^2 = 25 は大きすぎるので、ここでは  4^2 = 16 です。

おもむろに表に  4 \times 4 を書きます。

f:id:xtetsuji:20170118225741p:plain

 23 - 16 = 7 ですが、今度は位を一つ落として小数点第一位の数を探します。

f:id:xtetsuji:20170118225956p:plain

青い3つのセルのかけ算の結果を足した和を  7 から引き算してマイナスにならない範囲で最も小さくなるように、上記の表の黄色い2つのセルに入る同じ小数点第一位の数 0.x を見つけ出します。

考え方としては、4とのかけ算が発生する左下と右上のセルの寄与が大きいのでこちらを優先に考えます。右下のセルは最大でも  0.9^2 = 0.81 なので寄与は小さいです。

 0.8 だと  4 \times 0.8 = 3.2 で左下と右上で  6.4 になりますが、寄与の小さい左側が  0.8 ^ 2 = 0.64 となり、合計すると  7 より若干大きいので、改めて  0.7 を選択します。

f:id:xtetsuji:20170118230829p:plain

 2.8 + 2.8 + 0.49 = 6.09 なので、 7 からそれを引いた  0.91 が次に削る数となります。セルのクリーム色の5つを同様に…ということになります。今回は小数点第2位の数 0.0x を選ぶ事になります。今回のクリーム色のセルも、右下のセルに近いほど寄与が小さいことは同様です。

先程は「ギリギリ大きいのでやむなく一つ小さな数字」を取ったのですが、こういうときは通常の割り算などでも一つ位の低いところで取り返す事が多く、0.09 が行けるんじゃない?と気づけると良いです。

f:id:xtetsuji:20170118231242p:plain

最大でとって5つを  0.91 から引いても  0.0559 が残りました。

次は緑色の7つのセルです…とは言ったものの、開平はなかなかしんどいですね。

実際に電卓やパソコンで  \sqrt{23} を計算すると  4.7958315 \cdots となることがわかります。

「電卓もパソコンもない状態で無人島に飛ばされてしまって、しかも平方根を計算しなくてはならない!」という出来事は、ほとんど全ての現代人は一生に一度も経験しないことでしょう。

とはいえ私が「無人島平方根状態」に陥った場合はどうするでしょうか。どうせ時間が有り余っているはずなので、暇つぶしに上記の開平作業をするかもしれません。また精度の良い定規(または代用物)があれば、三平方の定理などを利用して実際に長さを測定する実験的試行も悪くないと思います。そこそこのかけ算や割り算の演算コストは気にならないという方(またはそのような前提条件の場合)は、 f(x) = x^2 - S = 0 の解を解くためのニュートン法の漸化式を何回か反復することで、そこそこの試行回数で精度のよい  \sqrt{S} が求められそうです。

私がまだ生まれる前の大昔は、それこそ立方体の体積から一辺の長さ…といった「開立法」というものも教えられていたらしいですが、Wikipedia の開立法のページを見てもため息が出るレベル(もともと私は暗算が得意ではない)。市販の安い電卓には {  \sqrt[3{S} } ] のような立方根ボタンはあまり見ませんが、関数電卓で立方根ボタンがある場合はそれを、そうでなくても関数電卓の指数計算ボタンで  S^{\frac{1}{3}} を求めれば良いでしょう。

開平は上述のようにかけ算の表形式でできますが、開立はそれこそ「かけ算の立体表」のようなものが必要となり、同じノリで書くことは難しいでしょう。それ以上に計算する要素が文字通り指数関数的に増え、開平以上の難易度があります。

もっとも、私は立方根を求められる装置が全くない世界で開立を迫られる「無人島立方根状態」になったら、かけ算や割り算のコストは全部払う覚悟で  f(x) = x^3 - S = 0 の解を解くためのニュートン法の漸化式をひたすら反復し続けると思います。

表をいっぱい書いていると、高校時代に習う人は習うアレに見えてきませんか?

かけ算の表形式を行列を通して見る

数の表といえば、高校時代に習う行列がまず浮かびます。

先ほどの  (6 + 7)(6 + 7) = 36 + 42 + 42 + 49 の表

f:id:xtetsuji:20170118220644p:plain

これを行列で書き直してみましょう。

f:id:xtetsuji:20170118235756p:plain

(※ はてなブログtex 記法だと行列(pmatrix による & 揃え) が書けないようで、具体的な行列表現は画面キャプチャでお送りします)

行列の積の定義の詳細は様々な文献に載っているので割愛しますが、 n \times m の行列と  m \times l といった、左側の行列の列数と右側の行列の行数が一致した場合に定義ができます。

通常の横ベクトルを行が1行、縦ベクトルを列が1列の特殊な行列とみなすと、縦ベクトルと横ベクトルの積がこのかけ算の表に対応していることがわかります。

f:id:xtetsuji:20170119000403p:plain

行番号にあたる縦ベクトル  \vec{v} 、列番号にあたる横ベクトル  \vec{u} を定義すると( \vec{v} が vertical、 \vec{u} が under*** という名前の雰囲気)、かけ算の表形式の行列  A  は縦ベクトルと横ベクトルを通常の行列の積とみなして

 { \displaystyle \vec{v} \vec{u} = A }

と書くことができます。とはいえ通常のベクトルの積は内積外積なので、この書き方はいささか誤解を生みそうです。

(※ ベクトルの書き方は、主に高校数学では上に右向き矢印を置くもの、大学教養課程以上の専門数学では太字で表現されますが、ここでは高校数学的表記を取っています。気分以外の意味は特にありません)

縦ベクトルは場所を取るので、横ベクトルを書いておいて右肩に t を書いておくことで縦ベクトルを表すこととします。これは一般的な行列の転置 (transpose) 記号です。

{ \left( \begin{array}{c} 6 \\ 7 \end{array}\right) = \big( 6, \, 7 \big)^t }  

上記では縦ベクトルと横ベクトルをかけ算の表形式の行と列に見立てて、かけ算の表形式の表が行列そのものとなるような行列(の特殊な形態である縦ベクトルと横ベクトル)の積であることを簡単に示しました。

行列  A が持っている全ての要素の和を考えようとしたのですが、そういえば高校数学や大学初年度の線形代数の授業では出てきません。正方行列の左上から右下までを足すトレースなどは線形代数的な意義を多分に持っているのですが、行列が持っている全ての要素の和というのは、確かに線形代数的な興味からは離れています。

少し考えてみましたが、簡単に行列  A  n 次の正方行列だったとしましょう。この時  A の要素の全ての和を求める作用素  \mathrm{total} を定義しますが、まず全ての要素が  1 である  n 次横ベクトル  \vec{h} を定義します。

 { \displaystyle \vec{h} = (1,1,1, \cdots , 1) }

この時、 n 次正方行列  A に作用する作用素  \mathrm{total} を以下のように定義します。

 { \displaystyle \mathrm{total} \, A  = \vec{h} \, A \, \vec{h}^t }

この時  \mathrm{total} \, A  A の全ての要素の和となっていることがわかります。ちょっと書くのが力尽きてきたので、ここは皆さんへの演習問題としましょう(自己都合)。

行列同士のかけ算を「かけ算の表形式」で求める

通常の数のかけ算が表形式でできるので、もともとが表のようなものである行列もこの表によるかけ算に還元できないものでしょうか。高校生の数学の助けくらいにはなりそうです。

ここでは高校数学の最後あたりで出てくる、以下の簡単な2次の正方行列で実演しましょう。

f:id:xtetsuji:20170119004319p:plain

これを今までのかけ算の表形式にならい、以下のように書きます。

f:id:xtetsuji:20170119004745p:plain

左側の行列を左下、右側の行列を右上に配置します。

次元(大きさ)が同じ正方行列同士は必ず行列の積が定義できますが、一般的には左側の行列の列数(横の長さ)と右側の行列の行数(縦の長さ)が同じ場合にのみ行列同士の積が定義されます。これを一言でいえば、上記の表形式だと左上の薄いグレーのセル群が正方形となればいいことになります。

以下は白い4つのセルを埋めるように数同士のかけ算をしていきますが、計算方法は色の同じ数字同士をかけ算した数を全て足すことになります。

なので最初のセルは  1 \times 4 + (-3) \times (-1) = 7 となります。

f:id:xtetsuji:20170119005209p:plain

結果は上記のような結果になります。

一つ一つの白いセルだけに着目すると、そこだけで横ベクトルと縦ベクトルの行列の積で1行1列行列の積ができているようにも見えますし、ベクトルの内積にも見えます。

この行列のかけ算の定義が、連立一次方程式の表現になっていたり、もっと広範な代数的意味の数々を内包していたりすることは、線形代数の教科書に譲ることにしましょう。

全て自然数の無限和を無限積にする

今まで出てきた話題は数学の分野で言うと「線形代数学」に近い話でした。この記事の最後に「解析学」もしくは「解析的整数論」の最初の方で出てくる無限和と無限積の話で締めたいと思います。わかりやすく言うと、「かけて足す」と「足してかける」が等しいのではなく、「無限に足す」と「無限にかける」が等しいという興味深い例です。

九九の表に現れた81個の数。もちろん右上と左下は同じ数( a \times b  b \times a は同じ数)なので、重複をのぞいた数の種類は多くて40種類程度でしょう。その中には  8 \times 3 = 24  4 \times 6 = 24 といったようなかけ算の順番以外の重複もあります。

上記の例のかけ算も、数学に詳しい方は「素因数分解をすればそれは  24 = 2^ 3 \times 3 だから…)と指摘をうけるかもしれません。

How many kind numbers 9*9 multiplation table has.

プログラムを書いて計算させると36通りの数があるようです。

「全ての自然数は一通りの素因数分解を持っている」という素因数分解の一意性は多くの高校生でも知っています。

九九の表に現れる素数は 2 3 5 7 の4種類であることと、九九の最大の数 81 は  3^4 で、 8 \times 8 = 64 = 2^6 などを考え合わせて、上記4種類の素数を全てラインナップして適度な累乗を足した以下の式

 { \displaystyle (2^1+2^2+2^3+2^4+2^5+2^6)(3^1+3^2+3^3+3^4)(5^1+5^2)(7^1+7^2) }

を分配法則で積から計算すると  6 \times 4 \times 2 \times 2 = 96 通りの数のラインナップが出てきますが、それらは素因数分解の一意性から全て違うもので、かつ九九の表のすべての数を包含しています(これのプログラムも良い演習問題かも)。

上記ような式でどんどん多い項数を書くとしんどいので、冒頭でも書いた総和記号  \sum で書き換えます。

 { \displaystyle \left(\sum_{k=1}^6 2^k \right) \left( \sum_{k=1}^4 3^k \right) \left( \sum_{k=1}^2 5^k \right) \left( \sum_{k=1}^2 7^k \right) }

累乗の数や素数の数を上記にならってどんどん増やしていくと、項として現れる自然数は重複なくどんどん増えていきますが、数が際限なく(無限大に向かって)増え続けるのが厄介で扱いづらいです。

扱いやすくしたいので、ひとまず  2^k ではなく  \frac{1}{2^k} にしてみましょう。

 { \displaystyle \left(\sum_{k=1}^6 \frac{1}{2^k} \right) \left( \sum_{k=1}^4 \frac{1}{3^k} \right) \left( \sum_{k=1}^2 \frac{1}{5^k} \right) \left( \sum_{k=1}^2 \frac{1}{7^k} \right) }

これを分配して得られた自然数の逆数  \frac{1}{N} という数も、素因数分解の一意性から全て違う数になります。素数の数と累乗の数をどんどん増やしていくと、無限和

 { \displaystyle \sum_{n=1}^\infty \frac{1}{n} }

に近づいていくことでしょう。前述の式の一時変数は  k としましたが、多少区別したいので  n としてあります。

ただこの無限和は非常に緩慢な速度ながら無限大に発散してしまいます。もうちょっと抑えたいということで 1より大きい実数  s を取って

 { \displaystyle \sum_{n=1}^\infty \frac{1}{n^s} }

を考えることにしましょう。これは有限の値に収束します。

 s  k が入り乱れると見づらいので、前述の素数の和の方を

 { \displaystyle \sum_{k=1}^6 \left( \frac{1}{2^s} \right)^k  }

と書き換えましょう。

さらに高校数学で習う等比数列の無限級数の定理から、全ての素数  p において公比  \frac{1}{p^s} は 1 未満なので、無限級数

 { \displaystyle \sum_{k=1}^\infty \left( \frac{1}{p^s} \right)^k }

は収束して

 { \displaystyle \sum_{k=1}^\infty \left( \frac{1}{p^s} \right)^k = \frac{1}{1 - \frac{1}{p^s} } = \frac{1}{1-p^{-s}} }

となります。書かれ方は単なる分数ですが、この分数は特定の素数  p についての全べき乗の情報を持っているともいえます。

総和記号  \sum のように全てかけ算する総乗記号が欲しくなってきます。実はそういう記号はあって  \prod と書きます。使い方は  \sum と同様です。

上述において、全ての自然数  n の逆数の  s 乗は、全ての素数の全ての累乗の素因数分解の一意性における積の組み合わせなので、 p が全ての素数にわたる総乗を  \prod_{p \in \mathbb{P} } と書くとすると

 { \displaystyle \sum_{n=1}^\infty \frac{1}{n^s} = \prod_{p \in \mathbb{P} } \frac{1}{1-p^s} }

と、有限の値に収束する無限和と無限積が等号で結ばれます。この等式は、素数の性質と素因数分解の一意性の情報が全て入っているという意味においても驚きがあります。

この右辺から、左辺の無限和は全ての素数に関する潤沢な情報を持っていることが見えてきます。現代数学は、 s に関する関数であるこの左辺の無限和を  \zeta(s) と書いて「リーマンのゼータ関数」と呼ばれ、様々な素数自然数に関する重要な定理を見出してきました。

冒頭の線形代数的な話題からは若干かけはなれてしまいましたが、和と積の順序交換だけでなく、無限和と無限積の変換といった別の話題もあり、無限の数についての深い研究のための第一歩として重要な役割を果たしているのです。

とても簡単な九九の表とかけ算という話題ですが、一つ一つ考察していくと頭の体操にもなり、別の視点も得られ、日々の生活の暗算の助けにもなります。高度な数学から俯瞰すると当たり前でしかない事実ではありますが、こういった違う視点が身の回りの小学生・中学生・高校生の算数・数学の学習の助けになるだろうかと、日々頭の体操ついでに考えてしまいます。