ホームページ  >  記事  >  バックエンド開発  >  Python で素数系列を正しく出力するには?

Python で素数系列を正しく出力するには?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-21 13:16:02530ブラウズ

How to Correctly Print Prime Number Series in Python?

Python での素数系列の出力

指定された範囲内の一連の素数を出力するには、一般的なアプローチは、範囲を指定して、各数値が素数かどうかを確認します。ただし、これを達成しようとする提供されたコードは、素数の代わりに一連の奇数を出力します。問題を調べて、最適な解決策を見つけてみましょう。

提供されたコードは、範囲 (1, 101) を反復処理し、各数値について、その数値自体までの割り算をチェックします。ここに間違いがあります。素数は 1 とそれ自体でしか割り切れないため、2 からその数値自体までの数値のみをチェックする必要があります。

修正されたコードは次のようになります:

<code class="python">for num in range(2, 101):
    prime = True
    for i in range(2, num):
        if (num % i == 0):
            prime = False
    if prime:
        print(num)</code>

この修正されたコード各数値のブール値フラグ素数を True に初期化し、数値自体をチェックして、適切な素数の識別を保証します。

あるいは、より簡潔で Python 的なアプローチは次のようになります。

<code class="python">for num in range(2, 101):
    if all(num % i != 0 for i in range(2, num)):
        print(num)</code>

このコードは、all() 関数内でジェネレーター式を使用して、その数値が 2 からそれ自身を除く任意の数値で割り切れるかどうかを判断します。そのような約数が存在しない場合、数値は素数として出力されます。

効率を高めるため、数値の平方根までの約数のみをチェックできます。これは、数値に大きな係数がある場合、それに対応する小さな係数もなければならないためです。以下のコードには、この最適化が組み込まれています。

<code class="python">import math
for num in range(2, 101):
    if all(num % i != 0 for i in range(2, int(math.sqrt(num)) + 1)):
        print(num)</code>

最後に、効率をさらに向上させるために、2 より大きい素数は常に奇数であるため、偶数のチェックをスキップできます。次のコードはこの最適化を反映しています:

<code class="python">import math
print(2)
for num in range(3, 101, 2):
    if all(num % i != 0 for i in range(3, int(math.sqrt(num)) + 1, 2)):
        print(num)</code>

以上がPython で素数系列を正しく出力するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。