개념
일정 범위 안의 소수를 여러 개 구할 때 사용합니다. 처음에는 이상의 수를 모두 소수 후보로 두고, 작은 소수부터 그 배수를 지웁니다.
배수 제거
의 배수, 의 배수, 의 배수 순서로 표시합니다. 이미 지워진 수는 합성수이므로 그 수의 배수를 다시 순회할 필요가 없습니다.
소수 의 배수 표시는 부터 시작합니다. 그보다 작은 배수 는 더 작은 소인수의 배수를 지우는 과정에서 처리됩니다. 이 되면 남아 있는 수들이 소수입니다.
이하의 소수는 입니다.
까지 구하는 과정을 보면 의 배수인 을 먼저 지웁니다. 다음으로 남아 있는 을 선택하고 을 지웁니다. 은 의 배수로 이미 지웠으므로 부터 시작해도 됩니다. 다음 소수 는 이므로 여기서 끝납니다. 합성수라면 제곱근 이하의 소인수가 있어야 하므로, 남은 수 중 아직 지우지 못한 합성수는 없습니다.
이렇게 만든 표는 범위 안의 각 수가 소수인지 바로 확인할 수 있습니다. 질의가 많을수록 같은 수를 반복해서 나누어보는 계산을 줄일 수 있으며, 대신 범위 전체를 저장할 공간이 필요합니다.
복잡도
소수를 구할 범위의 최댓값을 이라고 합니다.
| 연산 | 시간복잡도 | 공간복잡도 |
|---|---|---|
| 체 전처리 | 판별 표 | |
| 전처리 후 소수 여부 조회 | 추가 |
예제
문제
주어진 수 이하의 모든 소수를 구하여라.
입력
첫째 줄에 양의 정수 이 주어진다. 이다.
출력
소수를 오름차순으로 한 줄에 공백을 사이에 두고 출력한다.