티스토리 뷰

카테고리 없음

[백준 15965번] K번째 소수 (C++)

게임개발기원 2025. 6. 22. 02:51

문제 링크 : https://www.acmicpc.net/problem/15965

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1000000007;

int main() {
    
    int K;
    cin >> K;

    vector<bool> isPrime(7500000, true);
    isPrime[0] = isPrime[1] = false;

    int cnt = 0;
    for (int i = 2; i < 7500000; i++) 
    {
        if (isPrime[i]) 
        {
            cnt++;
            if (cnt == K) 
            {
                cout << i << "\n";
                break;
            }
            for (long long j = (long long)i * i; j < 7500000; j += i) 
            {
                isPrime[j] = false;
            }
        }
    }

    return 0;
}

 

소수를 미리 구하면서 소수 개수를 카운팅하고, 이때 K번째 소수일 때 바로 멈추고 출력해준다.

K 값의 최대 범위를 보면 50만인데, 50만번째 소수는 7,368,787이다.

따라서 소수 구하는 범위는 7500000까지로 지정하여 입력 범위 내 모든 소수를 찾을 수 있도록 하였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함