문제
다음은 한결이가 거울과 한 얘기중 일부이다.
- 한결 : 난 아무리 생각해도 기억력이 좋은 것 같아!
- 거울 : 양심없니?
- 한결 : 이걸 못 믿니? 너무 어이없네 ㅋㅋ
- 거울 : ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ
- 한결 : 하.. 이걸 못 믿네; 내 머릿속에 지금 모든 소수가 차례대로 들어가 있거든? 니가 원하는 번째의 소수를 대답해줄게
- 거울 : 그럼 k번째 소수가 뭔데??
- 한결 : k번째 소수는....
솔직히 한결이는 기억력이 쓰레기다. 그래서 소수를 외우고 있지 못하다. 하지만 이렇게 허세를 부리고 나니 거울한테 참교육을 시전해주고 싶었다. 한결이를 도와 k번째 소수를 알려주자.
소수의 정의는 다음과 같다.
2 이상의 자연수 N이 1과 N을 제외하고 어떤 자연수로도 나누어 떨어지지 않을 때 소수라고 한다.
입력
자연수 K가 주어진다.(1 ≤ K ≤ 500,000)
출력
K번째 소수를 출력하자.
서브태스크 1 (5점)
- K ≤ 5000
서브태스크 2 (20점)
- K ≤ 40000
서브태스크 3 (75점)
문제에서 주어진 제약 조건 외 조건 없음
Solved.ac 레벨
실버 II
풀이
#include <bits/stdc++.h>
#define MAX 7500000
using namespace std;
bool primeNum[MAX];
void eratos(){
for(int i = 2; i <= MAX; i++){
primeNum[i] = true;
}
for(int i = 2; i * i <= MAX; i++){
if(primeNum[i]){
for(int j = i * i; j <= MAX; j += i){
primeNum[j] = false;
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int k;
vector<int> prime;
cin >> k;
eratos();
for(int i = 2; i <= MAX; i++){
if(primeNum[i]){
prime.push_back(i);
}
}
cout << prime[k - 1] << "\n";
return 0;
}
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 10974번 : 모든 순열 (0) | 2023.03.24 |
---|---|
[BOJ / C++] 1990번 : 소수인팰린드롬 (0) | 2023.03.24 |
[BOJ / C++] 11057번 : 오르막 수 (0) | 2023.03.24 |
[BOJ / C++] 10844번 : 쉬운 계단 수 (0) | 2023.03.16 |
[BOJ / C++] 11945번 : 뜨거운 붕어빵 (0) | 2023.03.16 |