안녕하세요. 오늘은 슈퍼 소수를 찾아볼 거예요.

문제

https://www.acmicpc.net/problem/31216

아이디어

k번째 슈퍼소수는 k번째 소수번째 소수입니다.
에라토스테네스의 체를 이용해서 소수를 많이 저장해둔 다음에 쓰면 됩니다.

소스코드

#include <iostream>
#include <vector>
#define ll long long
using namespace std;

bool ck[1010101] = { 0 };
int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll i, j;
    vector <ll> v; v.push_back(1);
    for (i = 2; i <= 1000000; i++)
    {
        if (ck[i] == false) v.push_back(i);
        for (j = i; j <= 1000000; j += i) ck[j] = true;
    }

    ll T, N;
    cin >> T;
    while (cin >> N)
        cout << v[v[N]] << "\n";
}


감사합니다.

0개의 댓글