algorithm

[백준 1929번 소수 구하기]

선호하는 2022. 12. 15. 21:00

문제 링크: https://www.acmicpc.net/problem/1929

<문제>

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

 

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

 

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.


<문제 풀이>

에라토스테네스의 체 라는 개념을 적용하면 되는 문제라고 한다.

https://ko.wikipedia.org/wiki/에라토스테네스의_체

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간

ko.wikipedia.org

구간의 모든 숫자를 나열하고, 2부터 시작해서 나열된 숫자 집합에서 2로 나눌 수 있는 걸 뺀다.그 다음 나뉘어지지 않은 가장 가까이 있는 다음 숫자로 이동해 남은 숫자 집합에서 그 숫자로 나눌 수 있는 걸 뺀다.이걸 반복해서 남은 숫자들이 소수이다.

 

<소스코드>

key = [True for _ in range(1000001)]
key[0], key[1] = False, False
for i in range(2, 1000001):
    if key[i]:
        cnt = 2
        while i*cnt < 1000001:
            key[i*cnt] = False
            cnt += 1
start_N, end_N = map(int, input().split())

for i in range(start_N, end_N + 1):
    if key[i]:
        print(i)