[Silver IV] 에라토스테네스의 체 - 2960
성능 요약
메모리: 109544 KB, 시간: 92 ms
분류
수학, 구현, 정수론, 소수 판정, 에라토스테네스의 체
제출 일자
2026년 04월 25일 22:04:59
문제 설명
에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
이 알고리즘은 다음과 같다.
- 2부터 N까지 모든 정수를 적는다.
- 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
- P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
- 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(1, K) < N ≤ 1000)
출력
첫째 줄에 K번째 지워진 수를 출력한다.
💡 해결 방법
💻 코드
# 문제
# 에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
# 이 알고리즘은 다음과 같다.
# 2부터 N까지 모든 정수를 적는다.
# 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
# P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
# 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
# N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
# 입력
# 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(1, K) < N ≤ 1000)
# 출력
# 첫째 줄에 K번째 지워진 수를 출력한다.
# 예제 입력 1
# 7 3
# 예제 출력 1
# 6
# 예제 입력 2
# 15 12
# 예제 출력 2
# 7
# 예제 입력 3
# 10 7
# 예제 출력 3
# 9
# 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다.
n, k = map(int, input().split())
list1 = list(range(2, n + 1))
list2 = []
while list1:
now_min = list1[0]
list2.append(now_min)
list1.remove(list1[0])
for i in list1[:]:
if i % now_min == 0:
list2.append(i)
list1.remove(i)
print(list2[k - 1])