Pythonで理解する蟻本「2-6 素数の個数」(p.111)
この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「2-6 素数の個数」(p.111)
のコードをPythonで書き直したものとなっています。
入力
入力例1
11
入力例2
1000000
解答
MAX_N = 10 ** 6
prime = [None] * MAX_N # i番目の素数
is_prime = [True] * (MAX_N + 1) # is_prime[i]がTrueならiは素数
# n以下の素数の数を返す
def sieve(n):
p = 0
for i in range(n + 1):
is_prime[i] = True
is_prime[0] = is_prime[1] = False
for i in range(2, n + 1):
if is_prime[i]:
prime[p] = i
p += 1
for j in range(2 * i, n + 1, i):
is_prime[j] = False
return p
n = int(input())
ans = sieve(n)
print(ans)