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)