Pythonで素数かどうかを判定する方法
素数は、暗号技術をはじめとする多くのアプリケーションで中心的な役割を果たしています。そのため、さまざまな場面でPythonプログラムを使って素数を判定できることは重要なスキルとなります。素数とは、1とその数自身以外に約数を持たない数のことです。この記事では、与えられた数が素数かどうかを判定するPythonプログラムを、基本的な手法から最適化された手法まで段階的に紹介します。
基本的なアプローチ
ある数が素数かどうかを判定するには、以下の手順で処理を進めます。
まず入力された数が正の数かどうかを確認します。素数になり得るのは正の整数だけだからです。
2から「その数より1小さい数」までの範囲にあるすべての整数で割ってみます。
この範囲内のどれかの数で割り切れた(余りが0になった)場合は、その数は素数ではありません。
サンプルコード
x = 23
if x > 1:
for n in range(2, x):
if (x % n) == 0:
print(x, "is not prime")
print(n, "times", x // n, "is", x)
break
else:
print(x, "is a prime number")
else:
print(x, "is not prime number")
実行結果
上記のコードを実行すると、次のような結果が得られます。
23 is a prime number
6i±1の形を利用した効率的な判定
3より大きいすべての素数は「6i±1」の形で表せるという性質があります(iは1以上の整数)。これは、6i・6i+2・6i+4が必ず偶数になり、6i+3は必ず3の倍数になるためです。この性質を利用すると、2と3での割り算を先にチェックした後、実際に試すべき除数を6ずつ増やしながら「i」と「i+2」の2つだけに絞り込むことができます。さらに、試し割りは対象の数の平方根まで確認すれば十分です(それ以上大きな約数が存在するなら、対応する小さな約数が必ず見つかるためです)。
サンプルコード
def CheckPrime(n):
# 2と3の場合をチェック
if (n <= 1):
return False
if (n <= 3):
return True
# 2または3の倍数なら素数ではない
if (n % 2 == 0 or n % 3 == 0):
return False
i = 5
while (i * i <= n):
if (n % i == 0 or n % (i + 2) == 0):
return False
i = i + 6
return True
# 入力値のチェック
if (CheckPrime(31)):
print("true")
else:
print("false")
if (CheckPrime(25)):
print("true")
else:
print("false")
実行結果
上記のコードを実行すると、次のような結果が得られます。
true false
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない