에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
이 알고리즘은 다음과 같다.
N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(1, K) < N ≤ 1000)
첫째 줄에 K번째 지워진 수를 출력한다.
사용 알고리즘: 에라토스테네스의 체
- 2부터 n까지 담는 배열을 정의한다
- 반복문을 이용해서 2부터 n까지 지워지지 않은 수를 확인한다
- 지워지지 않은 수에 대해서 그의 배수를 전부 지운다
- 이 과정을 반복하면서 지울 때마다 result++
- result값이 k랑 같아지면 break하고 정답 출력
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
// 2부터 n까지의 수를 담는 배열
int prime[1001];
for (int i = 2; i <= n; i++)
{
prime[i] = i;
}
int result = 0;
// 2부터 n까지 지워지지 않은 수에 대해서 실행
for (int i = 2; i <= n; i++)
{
// 지워졌으면 무시
if (prime[i] == 0)
continue;
else
{
// 지워지지않은 수면 해당 수부터 그 수의 배수를 전부 지움
for (int j = i; j <= n; j += i)
{
if (prime[j] != 0) // 지워지지않은 수에 대해서만 실행
{
prime[j] = 0;
result++; // 지울 때마다 결과 ++
}
if (result == k) // k랑 같아지면 break하고 정답 출력
{
cout << j << '\n';
break;
}
}
}
}
return 0;
}