再帰処理を使って数値が素数かどうかを判定するPythonプログラム
再帰(リカーション)の手法を用いて、ある数値が素数かどうかを判定したい場合、判定用の関数を定義し、while 条件を組み合わせて処理を実装します。
再帰とは、大きな問題を小さな部分問題に分割してそれぞれの結果を計算し、それらを組み合わせることで全体の解を導き出す手法です。素数判定のように「同じ処理を条件が満たされるまで繰り返す」ケースに適しています。
そもそも素数とは、1とその数自身以外に正の約数を持たない、2以上の自然数のことです。たとえば 2、3、5、7、11 などが該当します。
サンプルコード
以下に実際の実装例を示します。
def check_prime(my_num, my_val = None):
if my_val is None:
my_val = my_num - 1
while my_val >= 2:
if my_num % my_val == 0:
print("この数は素数ではありません")
return False
else:
return check_prime(my_num, my_val-1)
else:
print("この数は素数です")
return 'True'
my_num = int(input("判定したい数値を入力してください : "))
print("数値を確認中です…")
check_prime(my_num)実行結果
判定したい数値を入力してください : 46 数値を確認中です… この数は素数ではありません
処理の流れと解説
- まず
check_primeという名前の関数を定義します。この関数は、判定対象の数値と、初期値としてNoneが代入された変数をパラメータとして受け取ります。 - 変数が
Noneの場合、その変数には「判定対象の数値から1を引いた値」が代入されます。これは自分自身で割り算を行わないようにするための工夫です。 - 変数の値が2以上である間、判定対象の数値をその変数の値で割り、余りが0になるかどうかを確認します。
- 余りが0であれば、約数が存在するということなので、その数は素数ではないと判断され、
Falseが返されます。 - 余りが0でない場合は、数値と「1を減らした値」を引数として渡し、同じ関数を再帰的に呼び出します。これにより、割る数を1ずつ小さくしながら検証が繰り返されます。
- 割る数が2未満まで処理が進むと、それ以上約数は存在しないため、その数は素数であると判断されます。
- 関数の外側では、ユーザーに対して判定したい数値の入力を求めます。
- 入力された値を引数として関数を呼び出すことで判定が実行され、結果がコンソールに出力されます。
まとめ
このプログラムでは、再帰呼び出しによって割る数を段階的に減らしながら素数判定を行っています。ループ処理でも同様の判定は可能ですが、再帰を使うことで「残りの検証範囲」がひとつずつ縮んでいく様子がコード上で明確になり、再帰の仕組みを理解する良い練習例となります。なお、大きな数値を扱う場合は再帰の深さ制限に注意し、必要に応じて平方根までの範囲だけを調べるなどの最適化も検討するとよいでしょう。
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない
-
【Python】ある数の最大の素因数を求めるプログラムの書き方
この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def