「各桁を足したものが 3 の倍数なら 3 の倍数」のように、2, 3, 5, 9, 10, 11 などいくつかの自然数については、倍数を判定する方法がよく知られている。そのうち、いくつかの判定方法は、倍数か否かが判定できるだけだが、剰余が計算できるものもある。たとえば、前述した 3 の倍数の判定方法の手順、各桁を足すという操作は剰余が保存されるので、3 で割った余りを求めることができる。
本稿では 7 に関して、昔から知られている倍数判定方法、および、筆者が発見した、倍数判定方法や剰余算出方法を紹介する。
7 の倍数判定方法として以前から知られているのは、「下 1 桁を 2 倍したものを、下 1 桁を除いたものから引く」、という操作を繰り返して得られる値が 7 で割り切れるか否か」というものである。この方法を、仮に「下 1 桁 2 倍法」と呼ぶことにする。
(筆者は 40 年くらい前に書籍で知っただけで、今となってはその書籍がなんだったかも覚えていない。)
「下 1 桁 2 倍法」は、比較的用意に 7 の倍数か否かを判定できるが、剰余は保存しないので、7 で割り切れない場合に、余りがいくつになるのかは、直接的にはわからない。
7 で割り切れる数である $3046729$ と、7 で割ると 6 余まる $3046728$ に対して「下 1 桁 2 倍法」を適用したものを図示する。$3046729$ の方は最終的な値 $28$ が 7 で割り切れるので 7 で割り切れる。$3046728$ の方は最終的な値 $18$ が 7 で割り切れないので、7 で割り切れない。$3046729$ を 7 で割った余りがいくつになるかは、直接的にはわからない。
$\xymatrix@C=0pt@R=2pt{
& 3 & 0 & 4 & 6 & 7 & 2 \rlap{\,\smash{|}} & 9 \ar@(r,r)[dl]^{\times2} & \hspace{50pt} & & 3 & 0 & 4 & 6 & 7 & 2 \rlap{\,\smash{|}} & 8 \ar@(r,r)[dl]^{\times2} \\
-) & & & & & 1 & 8 & & & -) & & & & & 1 & 6 \\
& 3 & 0 & 4 & 6 & 5 \rlap{\,\smash{|}} & 4 \ar@(r,r)[dl]^{\times2} & & & & 3 & 0 & 4 & 6 & 5 \rlap{\,\smash{|}} & 6 \ar@(r,r)[dl]^{\times2} \\
-) & & & & & 8 & & & & -) & & & & 1 & 2 \\
& 3 & 0 & 4 & 5 \rlap{\,\smash{|}} & 7 \ar@(r,r)[dl]^{\times2} & & & & & 3 & 0 & 4 & 5 \rlap{\,\smash{|}} & 3 \ar@(r,r)[dl]^{\times2} \\
-) & & & 1 & 4 & & & & & -) & & & & 6 \\
& 3 & 0 & 3 \rlap{\,\smash{|}} & 1 \ar@(r,r)[dl]^{\times2} & &&&&& 3 & 0 & 3 \rlap{\,\smash{|}} & 9 \ar@(r,r)[dl]^{\times2}\\
-) & & & 2 & & & & & & -) & & 1 & 8 &&&&\\
& 3 & 0\rlap{\,\smash{|}} & 1 \ar@(r,r)[dl]^{\times2} &&&&&& & 2 & 8\rlap{\,\smash{|}} & 5 \ar@(r,r)[dl]^{\times2}\\
-) & & 2 &&&&&& & -) & 1 & 0 \\
& 2 & 8 \rlap{\;\;\smash{\equiv 0 \pmod 7}} & & & & & & & & 1 & 8 \rlap{\;\;\smash{\equiv 4 \pmod 7}} \\
}$
念の為に書き添えておくと、「下 1 桁 2 倍法」は操作によって 2 桁以下になったところで 7 で割り切れるかを判定する。九九の 7 の段のほか、70, 77, 84, 91, 98 が 7 の倍数であることを知っていなければならない。
2020 年の 5 月に、「下 1 桁 2 倍法」とほぼ同様の手続きで判定できる「下 1 桁 5 倍法」と「下 2 桁以外 2 倍法」を発見した。
前者は「下 1 桁を 5 倍したものを、下 1 桁を除いたものに足す」という操作を繰り返すもので、「下 1 桁 2 倍法」とほぼ同じである。$5 \equiv -2 \pmod 7$ であるから、操作の結果得られる値も等しくなる。
「下 1 桁 5 倍法」に関しても、$3046729$ と $3046728$ に対して適用したものを図示する。
$\xymatrix@C=0pt@R=2pt{ & 3 & 0 & 4 & 6 & 7 & 2 \rlap{\,\smash{|}} & 9 \ar@(r,r)[dl]^{\times5} & \hspace{50pt} & & 3 & 0 & 4 & 6 & 7 & 2 \rlap{\,\smash{|}} & 8 \ar@(r,r)[dl]^{\times5} \\ +) & & & & & 4 & 5 & & & +) & & & & & 4 & 0 \\ & 3 & 0 & 4 & 7 & 1 \rlap{\,\smash{|}} & 7 \ar@(r,r)[dl]^{\times5} & & & & 3 & 0 & 4 & 7 & 1 \rlap{\,\smash{|}} & 2 \ar@(r,r)[dl]^{\times5} \\ +) & & & & 3 & 5 & & & & +) & & & & 1 & 0 \\ & 3 & 0 & 5 & 0\rlap{\,\smash{|}} & 6 \ar@(r,r)[dl]^{\times5} & & & & & 3 & 0 & 4 & 8\rlap{\,\smash{|}} & 1 \ar@(r,r)[dl]^{\times5} \\ +) & & & 3 & 0 & & & & & +) & & & & 5 \\ & 3 & 0 & 8\rlap{\,\smash{|}} & 0 \ar@(r,r)[dl]^{\times5} & &&&&& 3 & 0 & 5 \rlap{\,\smash{|}} & 3 \ar@(r,r)[dl]^{\times5}\\ +) & & & 0 & & & & & & +) & & 1 & 5 &&&&\\ & 3 & 0 \rlap{\,\smash{|}} & 8 \ar@(r,r)[dl]^{\times5} &&&&&& & 3 & 2 \rlap{\,\smash{|}} & 0 \ar@(r,r)[dl]^{\times5}\\ +) & 4 & 0 &&&&&& & +) & & 0 \\ & 7 & 0 \rlap{\;\;\smash{\equiv 0 \pmod 7}} & & & & & & & & 3 & 2 \rlap{\;\;\smash{\equiv 4 \pmod 7}} \\ }$
特に、$3046728$ に対して「下 1 桁 2 倍法」「下 1 桁 5 倍法」で計算した結果が合同であること、すなわち $18 \equiv 32 \equiv 4 \pmod 7$ に注目。
「下 1 桁 5 倍法」は、「下 1 桁 2 倍法」に比べ、5 倍の計算が面倒か、操作によって中間結果がどんどん大きくなっていって大変か、という懸念があった。しかし、実際にやってみると、5 の段のかけ算なので面倒ではないし、5 倍したものの下 1 桁は 0 か 5 なので、むしろ足し算は容易である。繰り下がりよりも、繰り上がりのほうが手計算では間違いが発生しにくいし、中間結果が変に大きくなりすぎることもない。
ここまでで紹介した「下 1 桁 2 倍法」「下 1 桁 5 倍法」は、いずれも剰余は保存されないので、倍数判定はできても、剰余を算出することはできない (厳密には、操作を何回繰り返したか、中間結果の値がいくつか、を元に算出できる)。
「下 2 桁以外 2 倍法」は、「下 2 桁以外を 2 倍したものを、下 2 桁に足す」という操作を繰り返すものである。この操作の前後の値は 7 を法として合同なので、繰り返し操作しても剰余が保存される、すなわち、元の数の剰余が求められるのである。
例によって、$3046729$ と $3046728$ に対して「下 2 桁以外 2 倍法」を適用したものを図示する。$3046729$ に対する一回目の操作は、下 2 桁 $29$ に、下 2 桁以外、すなわち上 5 桁を 2 倍した値 $60934$ を加えている。
$\xymatrix@C=0pt@R=2pt{ \rlap{\phantom{0}\underline{\hspace{46pt}}} & 3 \ar@(l,l)[d]_{\times2} & 0 & 4 & 6 & 7 \rlap{\,\smash{|}} & 2 & 9 & \hspace{50pt} & \rlap{\phantom{0}\underline{\hspace{46pt}}} & 3 \ar@(l,l)[d]_{\times2} & 0 & 4 & 6 & 7 \rlap{\,\smash{|}} & 2 & 8 \\ & \rlap{+)}\phantom{0} & & 6 & 0 & 9 & 3 & 4 & & & \rlap{+)}\phantom{0} & & 6 & 0 & 9 & 3 & 4 \\ & & \rlap{\phantom{0}\underline{\hspace{29pt}}} & 6 \ar@(l,l)[dl]_{\times2} & 0 & 9 \rlap{\,\smash{|}} & 6 & 3 & & & & \rlap{\phantom{0}\underline{\hspace{29pt}}} & 6 \ar@(l,l)[dl]_{\times2} & 0 & 9 \rlap{\,\smash{|}} & 6 & 2 \\ & & \rlap{+)}\phantom{0} & & 1 & 2 & 1 & 8 & & & & \rlap{+)}\phantom{0} & & 1 & 2 & 1 & 8 \\ & & & \rlap{\phantom{0}\underline{\hspace{19pt}}} & 1 \ar@(l,l)[d]_{\times2} & 2 \rlap{\,\smash{|}} & 8 & 1 & & & & & \rlap{\phantom{0}\underline{\hspace{19pt}}} & 1 \ar@(l,l)[d]_{\times2} & 2 \rlap{\,\smash{|}} & 8 & 0 \\ & & & & \rlap{+)}\phantom{0} & & 2 & 4 & & & & & & \rlap{+)}\phantom{0} & & 2 & 4 \\ & & & & \rlap{\phantom{0}\underline{\hspace{9pt}}} & 1 \rlap{\,\smash{|}} \ar@(l,l)[d]_{\times2} & 0 & 5 & & & & & & \rlap{\phantom{0}\underline{\hspace{9pt}}} & 1 \rlap{\,\smash{|}} \ar@(l,l)[d]_{\times2} & 0 & 4 \\ & & & & & \rlap{+)}\phantom{0} & & 2 & & & & & & & \rlap{+)}\phantom{0} & & 2 \\ & & & & & & & 7 & & & & & & & & & 6 \\ }$
「下 2 桁以外を 2 倍したものを、下 2 桁に足す」と、2 倍する桁数が多いのだが、2 をかけるだけなのでさほど大変ではない。また、「下 1 桁 2 倍法」「下 1 桁 5 倍法」に比べると、一回の操作で減る桁数が倍なので、操作の回数は少なくて済む。
もちろん、剰余が計算できるのは大きい。
先日 (2021年5月),「下 2 桁以外 2 倍法」を応用して、より桁数の少ない計算手順で剰余を求める方法を発見した。仮に、「2 桁 2 倍法」と呼称する。
基本的には、10 進で表現された数を 2 桁ごとに区切り、上のほうから 2 倍して下位に足し込んでいく、という手順を繰り返すだけである。ただし、計算の途中の値は、随時 7 を法として合同な値に替えてもよい。
今までと同様、自然数 $3046728$ に対して「2 桁 2 倍法」を適用した例を図示するが、例として簡単すぎるので、自然数 $98765432111$ に適用した例も示す。図中、$\left<\%7\right>$ で示した矢印は 7 を法として合同な値に替える操作である。
$98765432111 = 1420934744 * 7 + 3$ なので、得られた値は正しい。
$ \xymatrix@C=20pt@R=20pt{ 3 \ar@2{->}[d]|{\left<\%7\right>} & 04 \ar@2{->}[d]|{\left<\%7\right>} & 67 \ar@2{->}[d]|{\left<\%7\right>} & 28 \ar@2{->}[d]|{\left<\%7\right>} \\ 3 \ar@2{->}[ddd]|{\left<\times2\right>} & 4 \ar[d] & 4 \ar[d] & 0 \ar[d] \\ & \oplus\ar[d] & \oplus\ar[d] & \oplus\ar[d] \\ & 10 \ar@2{->}[d]|{\left<\%7\right>} & 10 \ar@2{->}[d]|{\left<\%7\right>} & 6 \\ 6 \ar@(r,l)[ruu] & 3 \ar@2{->}[d]|{\left<\times2\right>} & 3 \ar@2{->}[d]|{\left<\times2\right>} \\ & 6 \ar@(r,l)[ruuu] & 6 \ar@(r,l)[ruuu] \\ } $
$ \xymatrix@C=20pt@R=20pt{ 9 \ar@2{->}[d]|{\left<\%7\right>} & 87 \ar@2{->}[d]|{\left<\%7\right>} & 65 \ar@2{->}[d]|{\left<\%7\right>} & 43 \ar@2{->}[d]|{\left<\%7\right>} & 21 \ar@2{->}[d]|{\left<\%7\right>} & 11 \ar@2{->}[d]|{\left<\%7\right>} \\ 2 \ar@2{->}[ddd]|{\left<\times2\right>} & 3 \ar[d] & 2 \ar[d] & 1 \ar[d] & 0 \ar[d] & -3 \ar[d] \\ & \oplus\ar[d] & \oplus\ar[d] & \oplus\ar[d] & \oplus\ar[d] & \oplus\ar[d] \\ & 7 \ar@2{->}[d]|{\left<\%7\right>} & 2 \ar@2{->}[d]|{\left<\times2\right>} & 5 \ar@2{->}[d]|{\left<\times2\right>} & 3 \ar@2{->}[d]|{\left<\times2\right>} & -4 \ar@2{->}[d]|{\left<\%7\right>} \\ 4 \ar@(r,l)[ruu] & 0 \ar@2{->}[d]|{\left<\times2\right>} & 4 \ar@(r,l)[ruu]& 10 \ar@2{->}[d]|{\left<\%7\right>} & 6 \ar@2{->}[d]|{\left<\%7\right>} & 3 \\ & 0 \ar@(r,l)[ruuu] & & 3 \ar@(r,l)[ruuu] & -1 \ar@(r,l)[ruuu] & \\ } $
実際に筆算するときには、対象の自然数を書いたあと、2 桁ごとに区切る線を引き、そのブロックごとに下に必要な計算をしていけばよい。実際には表組みするほどではないが、下の表で説明すると、2 桁ごとに区切る線を引くと (A) ができる、(A) を計算しやすい一桁の値に変換していき、(B) ができる。あとは上位のブロックから、前列最後の値と (B) の和を 2 倍する、という操作を繰り返していく。
| 09 | 87 | 65 | 43 | 21 | 11 |(A)| 2 桁ごとに区切った値 |
| --- | --- | --- | --- | --- | --- || |
| 2 | 3 | 2 | 1 | 0 | -3 |(B)| (A) と合同な値 |
| 4 | 7 | 2 | 5 | 3 | -4 |(C)| 前列のいちばん下の値 と (B) との和 |
| | 0 | 4 | 10 | 6 | 3 |(D)| 以下、必要に応じて 2 倍したり、合同な値に変換したり |
|||| 3 | -1 | |(E)| |
2 桁以下の 7 の倍数は覚えておく必要があるが、九九の 7 の段と、$70, 77, 84, 91, 98$ を覚えておけばよいだけである。