Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで素数を判定するプログラムの書き方を徹底解説

はじめに

この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。

問題の概要

問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。

まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。

プログラムの考え方

今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。

  1. 1以下の数値は素数ではないため、数値が1より大きい場合のみ判定処理を行います。
  2. 2から num // 2 までの範囲にある各数値で割り切れるかどうかを順番に確認します。
  3. この範囲内に約数がひとつでも見つかれば、その数は素数ではありません。逆に、約数がひとつも見つからなければ、その数は素数であると判断できます。

なお、判定範囲を num // 2 までにすれば十分なのは、それより大きい約数が存在するなら必ず対応する小さい約数も存在するためです。さらに効率化したい場合は、判定範囲を int(num ** 0.5)(平方根)までに狭める方法もあります。

コード例

num = 17
if num > 1:
    for i in range(2, num // 2):
        # 2から n/2 までのいずれかの数で割り切れる場合は素数ではない
        if (num % i) == 0:
            print(num, "is not a prime number")
            break
    else:
        # ループが最後まで回りきれば約数は存在しない
        print(num, "is a prime number")
else:
    print(num, "is not a prime number")

実行結果

17 is a prime number

コードのポイント

このプログラムで注目すべきは、for 文に対応する else 節です。Pythonでは break されずにループが最後まで完了した場合に限り、else ブロックが実行されます。これにより、「約数がひとつも見つからなかった」ことを簡潔に表現できています。また、使用されるすべての変数はローカルスコープ内で宣言されており、処理の流れが追いやすい構造になっています。

まとめ

この記事では、Pythonを使って与えられた数値が素数かどうかを判定するプログラムの基本的な実装方法を学びました。for 文と剰余演算子 % を組み合わせることで、シンプルに素数判定を実現できます。ぜひ実際にコードを動かして、さまざまな数値で試してみてください。

  1. Pythonで数値の一意な素因数の積を求める方法

    この記事では、以下の問題文に対する解決策について学びます。問題文数値 n が与えられたとき、その数値が持つすべての一意な素因数の積を求めて返します。例入力: num = 11 出力: 積は 11説明ここでは、入力された数値は 11 であり、素因数は 11 のみです。したがって、その積は 11 となります。アプローチ1:総当たり法i = 2 から n+1 までの for ループを使用し、i が n の因数であるかどうかを確認します。因数であれば、さらに i 自体が素数かどうかを判定し、素数であれば product 変数に積を格納します。この処理を i が n になるまで繰り返します。コード例de

  2. Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法

    本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて