11^2 = 121 未満の数値を入力する限り、コードが機能することを指摘せざるを得ません (誤って 121 を素数と認識してしまいます)。
あなたが書いた方法は問題ありませんが、実際には Python のより強力な機能を利用していません。コードを見てみましょう:
x=0
y = raw_input("""Up to what number would you like to locate primes?: """)
for i in range(int(y)):
x = x + 1
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
elif x==2 or x==3 or x==5 or x==7:
print x, '--> PRIME'
elif x==1:
print x
else:
print x
Python では、0、1、2、...、y-1 にfor i in range(int(y))
設定されます。したがって、値を追跡するために別i
の変数は必要ありません。 x
y = raw_input("""Up to what number would you like to locate primes?: """)
for x in range(int(y)):
if x%2 and x%3 and x%5 and x%7:
print x, '--> PRIME'
Python では、 を使用in
して複数の選択肢に対して等価性をすばやくテストできるため (コンテナー メンバーシップをテストする特殊なケース)、x==2 or x==3 or x==5 or x==7
として書き換えることができますx in (2, 3, 5, 7)
。
素数の数を数えたい場合は、カウンターを追加しましょう。
num_primes = 0
y = raw_input("""Up to what number would you like to locate primes?: """)
for x in range(int(y)):
if x == 1:
# 1 actually passes the modulo tests and would be considered prime in the original code
print x
elif (x%2 and x%3 and x%5 and x%7) or x in (2, 3, 5, 7):
num_primes += 1 # this increments num_primes by 1
print x, '--> PRIME'
else:
print x
そして最後に、素敵なフォーマットのメッセージでそれを印刷します:
print 'There are {} primes between 0 and {}'.format(num_primes, y)
タダ!