Categories: Python

【Python】素数を判定したり、生成したりする方法

この記事では、Pythonで素数を判定したり、生成したりする方法を解説します。

素数とは、1以外の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とは、記号計算を行うためのライブラリです。素数の他にも因数分解や微分、積分など色々な計算を行うことができます。

SymPyはpipでインストールすることができます。

pip install sympy

pipを使ってパッケージ管理する方法

素数かどうかを判定するには、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トレンド

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago