このプログラムは、与えられた入力以下のすべての素数のリストを作成します。素数ファインダ(複数回含む)
これで、リストが印刷されます。
私が最初にプログラムを設計するとき、それは番号2を含む、なぜ、私は=素数のリストを初期化し理解することができない[2] Iは2%2 == 0、
if n % x == 0:
is_prime = False
ので、思ったので
はis_prime
からFalse
に設定されます。しかし、それはそうではないようです。
for
のループで私のrange()
のロジックに何かが起こっていると確信しています。
私の質問は次のようなものです:毎回素数のリストに2が含まれているのはなぜですか?
import math
limit = int(input("Enter a positive integer greater than 1: "))
while limit < 2:
limit = int(input("Error. Please enter a positive integer greater than 1: "))
primes = []
#Check all numbers n <= limit for primeness
for n in range (2, limit + 1):
square_root = int(math.sqrt(n))
is_prime = True
for x in range(2, (square_root + 1)):
if n % x == 0:
is_prime = False
if is_prime:
primes.append(n)
#print all the primes
print("The primes less than or equal to", limit, "are:")
for num in primes:
print(num)
'is_prime = False'の後ろに' break'を追加することで、このコードを大幅に高速化することができます。 10,000を考えてみましょう。 10000%2をチェックしてからis_prime = falseに設定し、10000%3、10000%4などをチェックします。 – Keatinge
2それ自体がプライムで、何が問題なのですか? – armnotstrong