1. 自然数$n$の各桁の数字の総和が$9$で割り切れるならば, $n$は$9$の倍数であることを証明してください。
2. 上の$9$の倍数の判定法をPythonを用いて実装してください。
$n$を任意の自然数とします。 そして, $n$を十進法展開して \[n = a_k\cdot 10^k+a_{k-1}\cdot 10^{k-1} +\cdots + a_2\cdot 10^2 + a_1 \cdot 10 + a_0\] と書きます。 ここで各$a_i$は$n$の$10^i$の位の数字です。
さて, $10 \equiv 1 \pmod 9$に注目すると, 任意の自然数$i$に対して \[10^i \equiv 1 \pmod 9\] となることがわかります。 この合同式を用いて, 上の$n$の式を次のように変形します。
\begin{align*} n &= a_k\cdot 10^k+a_{k-1}\cdot 10^{k-1} +\cdots + a_2\cdot 10^2 + a_1 \cdot 10 + a_0\\ &\equiv a_k\cdot 1+a_{k-1}\cdot 1 +\cdots + a_2\cdot 1 + a_1 \cdot 1 + a_0 \pmod 9\\ &\equiv a_k+a_{k-1} +\cdots +a_2 + a_1 + a_0 \pmod 9 \end{align*}
ここで, 式の最後のところは$n$の各桁の総和になっていることに注目します。 もしこの総和が$9$で割り切れるならば, 上式から$n \equiv 0 \pmod 9$となり, $n$も$9$で割り切れることが従います。
テキストで作成した$n$の桁の数字のリストを出力する関数を使います。
def digits_of (n): # nの桁の数字のリストを出力する関数。 nは自然数
digits = [] # nの桁の数字を入れるリスト
while n != 0:
r = n % 10 # 10で割った余り
digits.append(r) # リストに加える
n = n // 10 # nを10で割った整数に置き換える
return digitsこの関数を用いて$9$の倍数の判定法を書くと次のようなPythonコードになります。
def is_multiple_of_9 (n): # nは自然数
sum = 0 # 各桁の数字の合計をもとめる
for i in digits_of (n):
sum += i
return sum % 9 == 0 # もし合計が9の倍数ならTrue, そうでないならFalse