比較的かんたんな「あまり」の求め方(3)

概要

概要は(1)を御覧ください。

規則が無さそうな 7

7 で割り切れるかどうかは、実はこれまで程は楽な判定方法が無い。 楽になるケースもあるが、基本的には 7 が一桁の数であることもあり、筆算した方が早いケースがほとんどかもしれない。

とりあえず、 7 で割り切れるかの判定法として使えそうな方法を 3 つ紹介する。

  • 7 で割り切れるかどうかは、
    1. まず、数を 3 桁ずつに区切る。この3桁ずつを順番に足して引いてを繰り返して 0 になると、 7 で割り切れる。
    2. 上の位から順番に、「一番上の位(の7の余り)の3倍と次の位の数を足して余りを求める」ことを繰り返す。これが最終的に 0 になると、 7 で割り切れる。
    3. 下の位から順番に、「一番下の位(の7の余り)の2倍を、それ以外の位の数から引く」ことを繰り返す。これが最終的に 0 になると、 7 で割り切れる。

図解は後回しにして、それぞれの方法に触れてみて、実際に使える方法なのか確かめてみよう。

(1) 3桁ずつの交互和

7の倍数の判定法としては、一番実用性が低いものの、一番有名なのもこの方法だと思う。

特に、この方法で判定できる特殊ケースは、3桁ごとに同じ数が繰り返す数だ。 例えば、 257257 や 649649 は、1秒で 7 で割れると判断できる。

もう少し一般化すると、3桁ずつ区切って、グループ順に足し引きをする (11で割り切れるか判定で使ったような交互和を求める)ことになる。

例えば、 413,352,289 が 7 の倍数かを判定してみよう。 欧米圏だと丁度3桁ずつで区切り文字を入れるので分かりやすいが、 要はこの数を +413 -352 +289 という形で、3桁ずつ足し引きする。 計算すると、これは  350 = 7\times{}50 になり、 7 で割れると分かる。

だが、 3桁ずつの足し算というのはどうも暗算しづらい。 だが実は、3桁の時点で 7 の余りを求めてもいい。 なので、以下のように計算することもできる。

 +413 -352 +289 = (420 - 7) - (350 + 2) + (287 + 2) \rightarrow{} 0 -2 +2 = 0

3桁ずつにした上で 7 で割った余りを求めるなら、比較的できそうな気がする。 その足し引きは一桁の計算になるので楽だ。

これが1つ目の方法である。以下は計算過程の図式化。

(2) 上位桁から一桁ずつ3倍しながら処理する方法

調べた限り見つからなかったけれど、多分誰かが発見しているだろう方法である。 筆算するのとどちらが楽かというと微妙な方法だ。

この方法で、先程と同じ数 413,352,289 が 7 の倍数かを判定してみよう。

まず、一番上の桁の数は 4 で、次の数は 1 だ。なので、  4\times{}3 + 1 = 13 \rightarrow{} -1 となる (しれっと「マイナスの余り」という概念を持ち出してきている。また解説したい)。

次に、この数 2 と、次の数3 で同じことをやる。なので、  -1\times{}3 + 3 = 0 となる。

同じことを繰り返していくと、以下のようになる。

  •  0\times{}3 + 3 = 3
  •  3\times{}3 + 5 = 14 \rightarrow{} 0
  •  0\times{}3 + 2 = 2
  •  2\times{}3 + 2 = 8 \rightarrow{} 1
  •  1\times{}3 + 8 = 11 \rightarrow{} 4
  •  4\times{}3 + 9 = 21 \rightarrow{} 0

上から一桁ずつ見ていけばいいので、各計算で覚えておくべき数が少ないのが利点である。 しかし、 3 倍して足すと、大体2桁の足し算になるので、筆算と比べて楽かというと微妙である。 また、 3 倍して足さないといけないのに、それを桁の数だけ繰り返さないといけないから、計算ミスも起きやすい。

ともあれ、これが2つ目の方法である。以下は計算過程の図式化。

(3) 下位桁から一桁ずつ2倍しながら処理する方法

これは調べたら出てきた方法で、 (2) よりはこっちの方が楽かもしれない。 ただ、まだ筆算の方が楽。

この方法をまた同じ数 413,352,289 に使ってみよう。

一番下の位の数は9で、それ以外の位の数は 41,335,228 だ。 なので、 41,335,228-9\times{}2 = 41,335,228 - 18 = 41,335,210 となる。

次は、できた数の一番下の位の数は 0 で、それ以外は 4,133,521 だから、  4,133,521-0\times{}2 = 4,133,521 となる。

同様に繰り返していくと、以下のようになる。

  •  413,352 - 1\times{}2 = 413,350
  •  41,335 - 0\times{}2 = 41,335
  •  4,133 - 5\times{}2 = 4,123
  •  412 - 3\times{}2 = 406
  •  40 - 6\times{}2 = 28 = 7 \times{} 2

下から一桁ずつ見ていけばいいのが利点だが、上の桁を覚えておきながら計算するのが大変。

もう少し簡単にするには、上の桁が必要になったときにだけつけ加えるという手がある。 必要になったとき、というのは、「次の位の計算で必要になるとき」「繰り下がりが発生したとき」等だ。 そのテクニックを使ってもう一度計算してみよう。

  •  413,352,289 \rightarrow{} 289
  •  28 - 9 \times 2 = 10
  •  2 \rightarrow{} 21 - 0 \times 2 = 21
  •  2 - 1 \times 2 = 0
  •  335 \rightarrow{} 33 - 5 \times 2 = 23
  •  41 \rightarrow{} 412 - 3 \times 2 = 406
  •  40 - 6 \times 2 = 28 = 7 \times 2

これである程度は計算が楽になる。 これが3つ目の方法で、以下は計算過程の図だ。 途中で 7 の倍数になったら 0 にしてもいいテクニックを使っているので、少し計算過程が変わっている。

7 の倍数を並べてみる

なぜこれらの判定がうまくいくのだろうか? 実際に、 7 の倍数を並べてみよう。

きれいに斜めに並んで入るが、隣合わせではなく飛び飛びで、 簡単に計算できる規則性を見つけるのが難しい。

こういうときは 100 ずつ、 1,000 並べてみると良いと学んだのだから、 せっかくだから並べてみよう。 というわけで、一挙に 10 から 10,000,000 までを公開しよう。

「こんな細かい図を並べて誰が見るんだ」と思うが、 この細かすぎる図を少し眺めて見るだけですぐに気づくことが一つある。

それは、右側の上から2つ目と、下から2つ目が、斜めに隣接して規則的に並んでいるということだ。 前者は 1,000 ずつ並べたもので、斜め右下マス方向に並んでいる。 後者は 1,000,000 ずつ並べたもので、斜め左下マス方向に並んでいる。

これは、 11 の倍数でやったことの応用が効く。 11 の倍数を並べたときは、並べる数を10倍するごとに、交互に斜め左下と斜め右下の並びを繰り返していた。 一方、 7 の倍数を並べたときは、並べる数を 1000 倍するごとに、交互に斜め左下と斜め右下の並びを繰り返している。

そして、 11 では一桁ずつの交互和を求めれば 11 で割り切れるかを判定できた。 全く同様に、 7 では三桁ずつの交互和を求めれば、 7 で割り切れるかを判定できる。 そして、これこそが、本記事で紹介した第一の方法の根拠でもある。

マス目並びの規則を活用した方法を一般化する

しかし、先程も言った通り、三桁ずつの交互和というのは、ちょっと求めるのが大変である。 もう少し楽な方法として、第二・第三の方法を紹介したが、なぜそれらは上手くいくのだろうか?

これらは、斜めマス移動の理論を一般化したところから来ている。 どういうことだろうか。

今までの判定方法の復習

今までいくつかの図を眺めてきて、余りを求めてきた。 そこで何がやってきたかというと、要は【数を並べた表】の一番上を目指していたことに気づくだろうか。

11 の倍数のときの図が象徴的だから、これをもう一度見てみよう。

このときは、「一番上の桁を消す」ということを目標に、操作を繰り返していた。 この操作は、数を小さくして、【数を並べた表】を上へ上へと登っていく操作に他ならない。 そして、表の一番上には一桁の数字、一番左には「割り切れる」ということを意味する「0」がある訳だ。

特定の倍数の並べ方をしたとき、並べ方の規則を崩さないように「0」まで行ければ「割り切れる」となり、 そうならなければ「割り切れない」となるのである。 11 の場合は、並べ方が 10 倍変わるごとに、 11 の倍数の並び方が斜め右下と斜め左下を交互に繰り返した。 そのため、交互に斜めに【数を並べた表】を上へ上へと登っていくことで、最終的に表の一番上にたどり着けた。

3の場合や9の場合は、入れ替わることのない斜め移動で【数を並べた表】の上を目指した

2, 5, 4, 8 も、上位の桁を無視して、後は【数を並べた表】をエレベーター的に上に登れることを利用した、と見ることができる。

実際、今までの規則でも、 * 「分かりやすい規則」とは「エレベーター式に登れるマス目の並び」であり、 * 「分かりにくい規則」とは「斜め移動をしなければ登れないマス目の並び」だった。

そして、3や9、11の場合は、斜め移動の中でも簡単なものを扱ってきたのだ。 7の場合も、3桁ずつに区切れば同じだ。

「斜めにきれいに並ぶ」条件

では、倍数はいつ「斜めにきれいに並ぶ」、つまり、「1マス右または左に行き、1マス下に行く」という規則で並ぶのだろうか。 要は、 0 から 1 マス斜めに進んでみて割り切れたら OK なのだ。 なので、数を並べたとき、 0 から 1 マス斜めに進んだ先にある数が、  N で割り切れるかどうかを確認すれば良い。

というわけで、 N の倍数について (=割るを  N としたとき)、 何桁区切りのときに斜め左下マス、もしくは斜め右下マスに規則的に並ぶかは、 以下のように求められる。

  • 0 の右下にある 1000...1 の数が  N で割り切れるなら、その桁で並べたときに斜め右下マスに並ぶ。
  • 0 の左下に当たる 9999...9 の数が  N で割り切れるなら、その桁で並べたときに斜め左下マスに並ぶ。

表にしてみよう。

この表を見るだけで数十行語れそうだが、簡潔に特徴を挙げるだけに留めておこう。 ただし、表の値で 0 となっているところは、該当する斜めマスの並びが無いことを意味している。

  • 偶数と 5 の倍数では、斜め並びは見られない。
    • 一方、奇数では、 5 の倍数でない限り、必ず斜め並びが現れる。
  • 「斜め右下マス並び」と「斜め左下マス並び」で見ると、
    • 「左下並び」だけあるものはあっても、「右下並び」だけのものはない。
    • また、「右下並び」がある場合は必ず「左下並び」が見られ、それは必ず「右下並び」の2倍の桁区切りで見られる。
  • 大きな数でも小さな桁区切りで済むケースもある
    • 例えば、 37 は 3 桁区切りでいい。 99 も 2 桁区切りで良い。

この表に従って、【数を並べた表】を上に登っていけばいい。 つまり、この表の値ずつ桁区切りをして、 「右下並び」がある場合は交互和、ない場合は総和を求めて、 Nで割り切れるかどうかを確かめればいい。

だが、 Nで割り切れるかを確認しようとしたときに、 何桁ずつで区切れば斜め 1 マスずつできれいに並ぶかは、 Nごとに違う。 それをすべて知っておくのは大変だ。 しかも、 17 の時点で 8 桁区切りとか言われても、あまり恩恵を感じられない。 そもそも、斜めに並ばないケースも多くあるのだ。

斜め 1 マスずつできれいに並んでいない場合でも、 【数を並べた表】を上へ上へと登っていく方法を使えないだろうか? また、できることなら、 1 桁ずつでこの操作を一般化できないだろうか?

このまま一般化の話に続いていきたいが、長くなりすぎてしまったので、次の記事に譲ろうと思う。