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

【Python入門】数値が素数かどうかを判定するプログラムの書き方

この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。

素数とは?

素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。
たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。

素数判定プログラムのサンプルコード

# 入力された数値が素数かどうかを判定するPythonプログラム

# ユーザーから数値を入力として受け取る
num = int(input('数値を入力してください: '))

# 入力された数値が1より大きいかどうかを確認する
if num > 1:
    # 2からnum//2までの範囲で割り算を試す
    for i in range(2, num // 2 + 1):
        # numがiで割り切れる場合は素数ではない
        if (num % i) == 0:
            print(num, 'は素数ではありません')
            print(i, '×', num // i, '=', num)
            break
    else:
        # どの数でも割り切れなかった場合、numは素数
        print(num, 'は素数です')
# 1以下の数値は素数ではない
else:
    print(num, 'は素数ではありません')

実行結果

数値を入力してください: 47
47 は素数です
>>>
================= RESTART: C:/Python/primeNum1.py =================
数値を入力してください: -2
-2 は素数ではありません
>>>
================= RESTART: C:/Python/primeNum1.py =================
数値を入力してください: 3333
3333 は素数ではありません
3 × 1111 = 3333

入力例ごとの実行結果

  • 入力例1:num = 47 → 47 は素数です
  • 入力例2:num = -2 → -2 は素数ではありません
  • 入力例3:num = 3333 → 3333 は素数ではありません(3 × 1111 = 3333)

プログラムの解説

このプログラムでは、まずユーザーから数値を入力として受け取り、それが素数かどうかを判定します。1以下の数値は定義上素数ではないため、if num > 1 によって1より大きい数値だけを判定対象としています。

次に、2から入力値の半分(num ÷ 2)までの範囲にある整数で順番に割り算を試します。この範囲内に割り切れる数(約数)が1つでも見つかれば、その数は素数ではありません。逆に、最後まで割り切れる数が現れなければ、その数は素数であると判断できます。

for文のelse構文(for-else)について

Pythonのfor文にはelse節を組み合わせられます。このときelseブロックは、ループがbreakされずに最後まで完了した場合のみ実行されます。この性質を利用すると、「一度も割り切れなかった=素数である」という判定を簡潔に記述できます。

さらに高速化するには:平方根まで調べれば十分

実は素数判定では、2からnumの平方根まで調べれば十分です。n = a × b と表せる場合、aとbの少なくとも一方は必ず√n以下になるためです。これにより、大きな数値でも無駄な計算を減らして高速に判定できます。

import math

if num > 1:
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            print(num, 'は素数ではありません')
            break
    else:
        print(num, 'は素数です')
else:
    print(num, 'は素数ではありません')

ぜひ実際にコードを実行して、いろいろな数値で素数判定を試してみてください。

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

    はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない

  2. Pythonでアームストロング数を判定するプログラムの書き方

    この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す