Python でランダムな素数を生成する

Rayven Esplanada 2023年10月10日
Python でランダムな素数を生成する

このチュートリアルでは、Python でランダムな素数を生成して出力する方法を示します。

素数は、プログラミング、特に暗号化で使用される非常に便利な定数です。素数の使用は、機密データの暗号化とハッシュに使用でき、無計画に復号化されるのを防ぐため、暗号化とハッシュに不可欠です。

指定された範囲でランダムな素数を生成する関数を作成する

素数には 2つの因子しかありません(因子は、別の数を除算して整数にすることができる数です)。素数は 1 とそれ自体でのみ割り切れます。

0 から無限大までの範囲のランダムな素数を生成することは技術的に不可能です。これは、巨大な数になるまでそれを維持するために多くの処理能力を必要とするためです。

それを考えると、設定された範囲内の素数を収集するために、数値の範囲をパラメーターとして含める必要があります。

最初に行うことは、指定された範囲内のすべての素数をリストに収集する関数を作成することです。この関数では、範囲内のすべての数値をループし、分割可能な数値が 1 とそれ自体だけであるかどうかを確認します。

def primesInRange(x, y):
    prime_list = []
    for n in range(x, y):
        isPrime = True

        for num in range(2, n):
            if n % num == 0:
                isPrime = False

        if isPrime:
            prime_list.append(n)

    return prime_list


print(primesInRange(100, 250))

出力は、指定された範囲 100 から 250 までのすべての素数を出力します。

出力:

[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241]

次のステップは、関数 primesInRange() によって返される素数の指定された範囲から乱数を生成することです。

Python の random モジュールの下に、choice() という名前の関数があり、指定された反復可能またはシーケンスからランダムな要素を選択します。

上で実装された関数 primesInRange() を前提として、リスト変数で戻り値をキャッチし、random.choice() を使用してリスト内のランダムな素数を選択します。choice() 関数を使用する前に、random モジュールをインポートすることを忘れないでください。

import random

prime_list = primesInRange(100, 250)
randomPrime = random.choice(prime_list)

print("Generated random prime number: ", randomPrime)

ランダム化された出力のサンプル:

Generated random prime number:  191

これは、このソリューションの完全なソースコードです。

import random


def primesInRange(x, y):
    prime_list = []
    for n in range(x, y):
        isPrime = True

        for num in range(2, n):
            if n % num == 0:
                isPrime = False

        if isPrime:
            prime_list.append(n)
    return prime_list


prime_list = primesInRange(100, 250)
randomPrime = random.choice(prime_list)

print("Generated random prime number: ", randomPrime)
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python Number