2022年度計算機演習A・B

第8回:素数の判定

1. 繰り返し文におけるbreak

これまでの授業で学んできたように、Pythonでは処理の繰り返しを行うためにfor文とwhile文が用意されています。

for文は決まった回数の繰り返し、while文はある条件が成り立つ間の繰り返しを行うものですが、通常の終了の前に繰り返しを強制的に終了する必要がある場合にはbreakを使用します。

次のコードのように、基本的には何かしらの条件判定を行うif文を入れてその中にbreakを書きます。

なお、for文またはwhile文のネスト(入れ子)の場合は、breakを実行する最も内側の繰り返しのみが強制的に終了されます。

2. 素数の判定

素数(prime number)は、正の約数が $1$ と自分自身のみであるような $2$ 以上の自然数のことです。$2$ 以上の自然数のうち素数でないものを、合成数(composite number)と呼びます。

与えられた $2$ 以上の自然数が素数であるかどうかを判定する方法はいくつか知られていますが、最もシンプルな考え方に基づいた方法として試し割り法(trial division)があります。

試し割り法においては、与えられた $2$ 以上の自然数 $n$ に対して、$n$ が $2$ から $n-1$ までの数で割り切れるかどうかを小さい順に調べます。いずれかの数で割り切れれば $n$ は合成数であり、どの数でも割り切れなければ $n$ は素数という結論になります。

(注意)

$n$ が自分自身でない $\sqrt{n}$ より大きな約数をもつ場合には、$n$ は $1$ でない $\sqrt{n}$ より小さな約数も必ずもちます。

したがって、割り切れるかどうかを調べるのは、実際には $n-1$ ではなく $\sqrt{n}$ 以下の最大の自然数までで十分であることが分かります。

演習1

$2$ 以上の自然数 $n$ に対してそれが素数ならTrue、合成数ならFalseを返す関数is_prime(n)を定義して、is_prime(43)is_prime(91)の値を表示してください。

(オプション)可能であれば、上記の注意を反映したコードにすること。

演習2

演習1で定義した関数is_prime(n)を用いて、小さい順に $1$ 番目から $20$ 番目の素数を格納したリストを作成してその値を表示してください。

さらに、作成したリストを用いて、素数の番号と値の関係を表すグラフを描画してください。

第8回レポート課題

演習1~演習2に取り組んでください。