Python で数値が素数かどうかを確認する
素数は、1 とそれ自体を除いて、他の正の約数のない自然数として表すことができます。数 1 は素数のリストにカウントされません。
このチュートリアルでは、数値が素数であるかどうかを確認するために使用できるさまざまな方法について説明します。
Python で単純な反復法を使用して素数を決定する
この方法では、for
または while
ループを使用した単純な反復法を使用します。2 から K/2
までの数字を繰り返し、これらの数字のいずれかが K
を分割するかどうかを確認します。
この基準に一致する数値が見つかった場合、False
が返されます。一方、すべての数値がこの基準に一致しない場合、指定された数値 K
は素数であり、True
値が返されます。
次のコードは、単純な反復法を使用して、指定された数値が Python の素数であるかどうかを確認します。
k = 13
# 1 not being a prime number, is ignored
if k > 1:
for i in range(2, int(k / 2) + 1):
if (k % i) == 0:
print("It is not a prime number")
break
else:
print("It is a prime number")
else:
print("It is not a prime number")
出力:
It is a prime number
いくつかの変更を適用することで、上記のコードを最適化できます。コードをさらに高速化するには、次の最適化を実行します。
*正確な数を確認するのではなく、指定された数のルートに到達するまで確認してください。このプロセスは基本的に、数 K
の大きな因数がすでに繰り返されている小さな因数の倍数である場合に発生する冗長性を排除しています。
*すべての素数は 6n±1 の形式で存在しますが、2 と 3 だけが例外です。したがって、2 と 3 で与えられた数の分割可能性をチェックし、次に 6n±1 の形式を持つすべての数をチェックすることがより効率的な解決策です。
次のコードは、最適化された単純な反復法を使用して、指定された数値が Python の素数であるかどうかを確認します。
def isitPrime(k):
if k == 2 or k == 3:
return True
if k % 2 == 0 or k < 2:
return False
for i in range(3, int(k ** 0.5) + 1, 2):
if k % i == 0:
return False
return True
print(isitPrime(13))
出力:
True
最適化された反復法により、単純な反復法よりも約 30%高速かつ効率的になります。
指定された数値が Python の素数で sympy.isprime()
関数を使用してあるかどうかを確認する
SymPy
は、記号数学を実装するために使用される Python のライブラリです。これは、すべての重要な機能を含む単純な数式処理システム(CAS)を目指しています。この方法では、このモジュールのインストールが必要であり、pip
コマンドを使用するだけでダウンロードできます。
sympy.isprime()
は SymPy
モジュールの下に組み込まれた関数であり、可能な素数のチェックに利用できます。これは直接関数であり、チェックする数値が素数の場合は True
を返し、素数でない場合は False
を返します。
次のコードは、sympy.isprime()
関数を使用して、指定された数値が Python の素数であるかどうかを確認します。
from sympy import *
isprime(8)
isprime(11)
出力:
False
True
負の数は素数の基準に該当しないことに注意してください。これらの関数の出力は、負の数がチェックされた場合に異なる場合があります。
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn