🚀 [에스토스테네스의 체] 문제 😊😊😊😊😊
에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
이 알고리즘은 다음과 같다.
- 2부터 N까지 모든 정수를 적는다.
- 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
- P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
- 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
🔑 [풀이]
에스토스테네스의 체는 우선 2부터 n까지의 수를 컨테이너에 모두 쓴 상태에서 컨테이너를 순회하면서 지워지지않은 목록들을 지워나갑니다. ex) 2를 제외한 n이하의 모든 2의 배수들을 컨테이너에서 제거합니다. 다음 제거되지않은 3의 제외한 3의 배수들을 컨테이너에서 지워갑니다.
⌨️ 입력
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(1, K) < N ≤ 1000)
🖥 출력
첫째 줄에 K번째 지워진 수를 출력한다.
🖱 입력 예제
15 12
💻 출력 예제
7
💎 전체 코드는 다음과 같습니다.
//
// 2960.cpp
// AALGGO
//
// Created by inhyeok on 2021/11/12.
//
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n,k;
cin >> n >> k;
vector<bool> vec(n+1, true);
vec[0] = false;
vec[1] = false;
int count = 0;
for(int i=2; i<n+1 ; i++){
if(vec[i]){
for(int j=i; j< n+1;j+=i)
if(vec[j]){
vec[j] = false;
count++;
if(count == k){
cout << j;
return 0;
}
}
}
}
return 0;
}
Comments