Pythonで数値が素数かどうかを判定する方法
素数判定の基本的な考え方
ここで紹介する方法の原理は、与えられた数を3からその平方根までのすべての整数で順に割っていくというものです。ある数の平方根は、その数が持ちうる約数の中で最大の候補となる値です。したがって、平方根を超える数については、割り切れるかどうかを確認する必要はありません。
この関数は、2で割り切れる数や2未満の数に対しては False を返します。それ以外の数については、組み込み関数 all() を使い、平方根以下のいずれかの数で割り切れる場合には False(素数ではない)、どの数でも割り切れない場合には True(素数である)を返します。
サンプルコード
def is_prime(a):
if a < 2:
return False
elif a != 2 and a % 2 == 0:
return False
else:
return all(a % i for i in range(3, int(a**0.5) + 1))
num = int(input('enter a number'))
if is_prime(num) == True:
print("{} is a prime number".format(num))
else:
print("{} is not a prime number".format(num))実行結果
上記プログラムの実行例は以下の通りです。
enter a number24 24 is not a prime number enter a number47 47 is a prime number
ポイントの解説
このアルゴリズムのポイントは、判定範囲を「2から対象の数まで」ではなく「3から平方根まで」に限定している点です。これにより、計算量が大幅に削減され、大きな数でも高速に素数判定が行えます。
- 2未満の数(0や1など)は定義上素数ではないため、即座に
Falseを返します。 - 2以外の偶数は必ず2で割り切れるため、素数ではありません。
int(a**0.5)で平方根の整数部分を求め、そこまでの奇数についてのみ割り切れるかを検証します。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない