演習課題「エラトステネスの篩を実装する」
右側のコードエリアには、関数eratosthenesを用いて1以上1,000以下の全ての整数について素数判定をおこなうコードが用意されています。関数eratosthenesのコードを書き加え、コードを完成させてください。
期待する出力値
なし
#03:エラトステネスの篩
このチャプターでは、ある整数以下のすべての素数を見つけるアルゴリズムである「エラトステネスの篩」について学習します。
isPrimeを計算するときのiのループ範囲は、実は√nまでで十分です。import math
isPrime = [True] * (n+1)
isPrime[0], isPrime[1] = False, False
for i in range(2, int(math.sqrt(n))+1):
if not isPrime[i]:
continue
for j in range(i*2, n+1, i):
isPrime[j] = False
return isPrime
def eratosthenes(n):
isPrime = [True] * (n+1)
isPrime[0], isPrime[1] = False, False
for i in range(2, n+1):
if not isPrime[i]:
continue
for j in range(i*2, n+1, i):
isPrime[j] = False
return isPrime
n = 813
isPrime = eratosthenes(n)
for i in range(1, n+1):
if isPrime[i]:
print(f"{i} は素数")
else:
print(f"{i} は素数ではない")