에라토스테네스의 체란?
임의의 자연수 n에 대해 그 이하의 소수를 찾는 가장 간단하고 빠른[2] 방법이다.
마치 체로 치듯이 수를 걸러낸다고 하여 불리는 이름.
에라토스테네스의 체 파이썬 구현
n = int(input())
a = [True] * (n + 1)
m = int(n**0.5)
for i in range(2, m + 1):
if a[i] == True:
for j in range(i + i, n + 1, i):
a[j] = False
print([i for i in range(2, n + 1) if a[i] == True])
- 알고리즘
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다.
- 2부터 시작해서 나열된 수에서 지워지지 않은 수 중 가장 작은 2를 소수로 선택하고 2의 배수를 지운다.
- 3도 지워지지 않았기 때문에 소수로 선택하고 3의 배수를 지운다.
- 4는 지워졌기 때문에 넘어가고 5를 소수로 선택하고 5의 배수를 지운다.
- 2,3,4와 같은 과정을 반복한다.
- 반복이 끝나면 지워지지 않은 수들을 소수로 출력한다.