この記事では、Pythonで素数を判定したり、生成したりする方法を解説します。
素数とは、1以外の1と自分自身でしか割り切れない自然数のことを言います。
それでは、素数を扱う方法を見ていきましょう!
それではまずは、素数を判定する方法を見ていきましょう!
素数は以下のようなコードで判定することができます。
def isprime(n: int) -> bool:
# 1以下は素数ではないので排除
if n <= 1:
return False
# 2からnの2分の1乗までのループ
for x in range(2, int(n ** 0.5) + 1):
if n % x == 0:
# 割り切れる値があれば素数ではないのでFalseを返す
return False
# ここまでくれば素数
return True
試しに 0 ~ 100 までの素数を出力してみます。
for i in range(20):
if isprime(i):
print(i)
実行結果
2
3
5
7
11
13
17
19
あらかじめ偶数を排除する方法もある。
def isprime(n: int) -> bool:
if (n < 2): return False
elif (n == 2): return True
elif (n % 2 == 0): return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
SymPyとは、記号計算を行うためのライブラリです。素数の他にも因数分解や微分、積分など色々な計算を行うことができます。
SymPyはpip
でインストールすることができます。
pip install sympy
素数かどうかを判定するには、isprime()
関数を使う。
from sympy import isprime
for i in range(20):
if isprime(i):
print(i)
実行結果
2
3
5
7
11
13
17
19
2の64乗以降の数は疑似素数が含まれる可能性がある
SymPyには、素数を取得する関数が他にもたくさん用意されている。
import sympy
# n番目の素数を返す
sympy.prime(1) # 2
sympy.prime(2) # 3
sympy.prime(10) # 29
# nまでの素数の数
sympy.primepi(2) # 1
sympy.primepi(5) # 3
sympy.primepi(20) # 8
LinkNumber Theory — SymPy 1.9 documentation
先ほど作成した関数と内包表記を組み合わせることで素数のリストを生成することができる。
def ispirme(n: int) -> bool:
if n <= 1: return False
for x in range(2, int(n ** 0.5) + 1):
if n % x == 0:
return False
return True
# 素数のリスト
primes = [i for i in range(20) if ispirme(i)]
print(primes)
実行結果
[2, 3, 5, 7, 11, 13, 17, 19]
Sympyが使える状況ならprimerange()
を使うともっと簡単に任意の範囲の素数のリストを生成できる。
from sympy import sieve
primes = list(sieve.primerange(20))
print(primes)
実行結果
[2, 3, 5, 7, 11, 13, 17, 19]
この記事では、Pythonで素数を判定したり素数のリストを生成する方法を解説しました。
素数は、RSA暗号に使われたりします。RSA暗号とは、素因数分解にとても時間がかかることを利用した暗号化方法です。
外部RSA暗号とは?仕組みや応用事例を初心者にもわかりやすく解説!|ITトレンド
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ