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 サイトの他の関連記事を参照してください。