Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

Python (Python 3) で数学をやるにはどうしたらいいか。その32. 整数論。倍数判定の基礎。

このシリーズの過去記事は以下にまとめてある。

py3math.hatenablog.com

当記事について

当ブログ筆者 (以下、筆者) も、Python で数学をやるにはどうしたらいいか悩んでいた時期があるから、昔の自分に向けて書いたような記事。

対象とする読者

Python の入門書を一冊か二冊、一通りやった人で、Python の基本的な構文や基本的な用語がだいたいわかっている人。

そして、公式サイトを読む努力をちゃんとする人。

ちょっとしたお願い

使用する数式は、はてなブログTeX (tex) 記法で書いたほうが断然にわかりやすいが、当ブログでは、数式を書籍からお借りしていることが多く、あまりにわかりやすいかたちで書くのは筆者には若干のためらいがある。

もし読者がちゃんとした数式を読みたければ、やはり、書籍を購入するべきだと思う。

なお、当ブログではアフィリエイトやその類のことは一切やっていない。存分にリンクを踏んで書籍を購入されたい。もちろん、当ブログから購入しなくてもいい。どこからでもいいからなるべく購入はしてほしい。

倍数判定の基礎をやってみよう

2 つの整数 m, n (m > n) に倍数の関係があるかどうか判定してみよう。

ここでは、m = k * n (k: 整数) と式のかたちに表せるかどうかで判定する。

前提知識として:

1 は特別な約数で、すべての整数の約数 (m = 1 * m)

0 は特別な倍数で、すべての整数の倍数 (0 = m * 0)

まずこれを簡単に確かめてみよう。

Python の対話モードから:

>>> print('m = 1 * m')
m = 1 * m
>>> for m in range(10):
...     if m == 1 * m:
...         print('{} = 1 * {}'.format(m, m))
...     else:
...         print('世界の終わりかな')
...
0 = 1 * 0
1 = 1 * 1
2 = 1 * 2
3 = 1 * 3
4 = 1 * 4
5 = 1 * 5
6 = 1 * 6
7 = 1 * 7
8 = 1 * 8
9 = 1 * 9
>>>
>>> print('0 = m * 0')
0 = m * 0
>>> for m in range(10):
...     if 0 == m * 0:
...         print('0 = {} * 0'.format(m))
...     else:
...         print('世界の終わりかな')
...
0 = 0 * 0
0 = 1 * 0
0 = 2 * 0
0 = 3 * 0
0 = 4 * 0
0 = 5 * 0
0 = 6 * 0
0 = 7 * 0
0 = 8 * 0
0 = 9 * 0

では、具体的な問題を解いてみよう。

問題:

以下を式のかたちで判定せよ。

(1) 6 は 1 の倍数である。
(2) 5 は 0 の倍数である。
(3) 0 は 5 の倍数である。
(4) 0 は 7 の倍数である。

上の問題からわかることを書くと、例えば、(1) は、6 = 1 * n(2), (3), (4) も同様に考えることができる。

だから、6, 5, 0, 0 を左辺とし、1, 0, 5, 7 を右辺とし、n を見つければよい。

まず左辺と右辺をリストで用意しよう。

(lhs は左辺、rhs は右辺という意味)。

>>> lhs_list = [6, 5, 0, 0]
>>> rhs_list = [1, 0, 5, 7]

では、for 文で一気に処理してみよう。

>>> for lhs, rhs, in zip(lhs_list, rhs_list):
...     for n in range(10):
...         if lhs == rhs * n:
...             print('{} = {} * {}'.format(lhs, rhs, n))
...             print('{} は {} の倍数である。'.format(lhs, rhs))
...             break
...     else:
...         print('{} = {} * 整数 というかたちで表せない。'.format(lhs, rhs))
...         print('だから、{} は {} の倍数ではない。'.format(lhs, rhs))
...     print('')
... 
6 = 1 * 6
6 は 1 の倍数である。

5 = 0 * 整数 というかたちで表せない。
だから、5 は 0 の倍数ではない。

0 = 5 * 0
0 は 5 の倍数である。

0 = 7 * 0
0 は 7 の倍数である。

(つづく)。

参考文献 (数式等を参考)

改訂第2版 佐々木隆宏の 整数問題が面白いほどとける本 (数学が面白いほどわかるシリーズ)

初等整数パーフェクト・マスター めざせ、数学オリンピック!

広告を非表示にする