Pythonで素数をピックアップするプログラムの修正方法

プログラミング

Pythonを使って素数をピックアップするプログラムを作成する際に、間違ったロジックやエラーが発生することがあります。ここでは、与えられたコードがなぜ正しく動作しないのかを解析し、正しい方法で素数をピックアップする方法を説明します。

問題のコードの分析

質問者のプログラムでは、`n`の値が2から始まり、`i`が`2`から`sqrt(1000)`まで繰り返し、`n`が素数かどうかを判定することを目的としています。しかし、実行結果として期待される素数が得られていません。

コードの問題点として、`if n % i != 0:`という条件の使い方が誤っています。この条件は、`i`が`n`の因数でない場合に`n`を増やし、その後`print(n)`で出力するという流れです。ですが、素数判定のロジックとしては不適切です。

修正されたコード

素数を正しくピックアップするためには、`n`が2から1000までの範囲で素数かどうかを判断する方法を改良する必要があります。以下の修正されたコードを参考にしてください。

for n in range(2, 1001):
    is_prime = True
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            is_prime = False
            break
    if is_prime:
        print(n)

修正内容の解説

修正されたコードでは、`n`が2から1000までの各数に対して、`n`が素数かどうかを判断します。内部で`n`が`i`で割り切れる場合には素数ではないと判定し、`is_prime`フラグを`False`に設定します。割り切れなければ、その数は素数として出力されます。

コードの説明

修正後のコードは、以下の手順で動作します。

  • `n`を2から1000まで順に検査します。
  • それぞれの`n`に対して、2から`n`の平方根までの整数で割り算を行い、割り切れた場合は素数ではないと判断します。
  • 割り切れなければ、その`n`は素数として認識され、`print`で出力されます。

まとめ

Pythonで素数をピックアップするプログラムの修正方法を解説しました。`n % i != 0`のロジックを改善し、素数判定を行うことで、期待通りの結果が得られるようになります。この修正を参考に、他の問題にも応用できます。

コメント

タイトルとURLをコピーしました