Pythonは非常に柔軟であるため、様々なアルゴリズムを使って素数のリストを取得することができます。以下では、いくつかの方法を紹介します。
1. エラトステネスの篩を使う
エラトステネスの篩は、古代ギリシャの数学者エラトステネスによって考案されたアルゴリズムです。このアルゴリズムを使うと、ある範囲内の素数を効率的に求めることができます。
def eratosthenes(n):
prime = [True] * (n + 1)
p = 2
while p * p <= n:
if prime[p]:
for i in range(p * p, n + 1, p):
prime[i] = False
p += 1
return [p for p in range(2, n + 1) if prime[p]]
この関数を使って、10以下の素数を取得するには、以下のようにします。
primes = eratosthenes(10)
print(primes) # [2, 3, 5, 7]
2. sympyを使う
sympyは、シンボリック計算を扱うためのPythonライブラリです。このライブラリを使うと、素数を簡単に取得することができます。
from sympy import primerange
primes = list(primerange(0, 10))
print(primes) # [2, 3, 5, 7]
3. Numpyを使う
Numpyは、数値計算を扱うためのPythonライブラリです。このライブラリを使うと、素数を高速に取得することができます。
import numpy as np
def primesfrom2to(n):
"""n以下の素数を返す"""
sieve = np.ones(n // 3 + (n % 6 == 2), dtype=bool)
for i in range(1, int(n ** 0.5) // 3 + 1):
if sieve[i]:
k = 3 * i + 1 | 1
sieve[((k * k) // 3)::2 * k] = False
sieve[((k * (k - 2 * (i & 1) + 4)) // 3)::2 * k] = False
return np.r_[2, 3, ((3 * np.nonzero(sieve)[0][1:] + 1) | 1)]
primes = primesfrom2to(10)
print(primes) # [2 3 5 7]
これらの方法を使って、Pythonで素数のリストを取得することができます。