백준 2960 - 에라토스테네스의 체

su-mmer·2022년 10월 16일
0

문제풀이

목록 보기
33/43

문제

에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.

이 알고리즘은 다음과 같다.

  1. 2부터 N까지 모든 정수를 적는다.
  2. 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
  3. P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
  4. 아직 모든 수를 지우지 않았다면, 다시 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이다.

풀이

에라토스테네스의 체를 이용하여 k번째로 지워지는 값을 찾는다.
check 리스트를 만들어 n까지 소수를 판별한다.

파이썬 코드

"""
에라토스테네스의 체를 이용하여 k번째로 지워지는 값을 찾는다.
"""

n, k = map(int, input().split())
check = [False, False] + [True]*(n-1)

for i in range(2, n+1):
    for j in range(i, n+1, i): # i의 배수를 지운다.
        if check[j]: # true이면 false로 변경하여 지움
            check[j] = False
            k -= 1
            if k == 0: # k번째 수를 찾으면 출력하고 나감
                print(j)
                exit()

0개의 댓글