結果

問題 No.2724 Coprime Game 1
ユーザー hirakuuuuhirakuuuu
提出日時 2024-04-12 22:07:48
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,691 bytes
コンパイル時間 2,762 ms
コンパイル使用メモリ 247,408 KB
実行使用メモリ 16,404 KB
最終ジャッジ日時 2024-10-02 23:20:45
合計ジャッジ時間 4,432 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
15,940 KB
testcase_01 AC 37 ms
16,276 KB
testcase_02 WA -
testcase_03 AC 207 ms
16,148 KB
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i++)
#define rrep(i, a, n) for(int i = a; i >= n; i--)
#define inr(l, x, r) (l <= x && x < r)
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<ll, ll>
// constexpr ll MOD = 1000000007;
constexpr ll MOD = 998244353;
constexpr int IINF = 1001001001;
constexpr ll INF = 9e18;

template<class t,class u> void chmax(t&a,u b){if(a<b)a=b;}
template<class t,class u> void chmin(t&a,u b){if(b<a)a=b;}

ll power(ll a, ll b, ll m=MOD){
    ll res = 1;
    while(b > 0){
        if(b%2 == 1) res = res*a%m;
        a = a*a%m;
        b /= 2;
    }
    return res;
}

// 0ならば素数, 0でないなら最小の素因数
vector<int> erat(3000005);
void init_e(){
    rep(i, 2, sqrt(3000005)+1){
        if(erat[i] == 0){
            for(ll j = i*i; j < 3000005; j += i){
                if(erat[j] == 0) erat[j] = i;
            }
        }
    }
}

int main(){
    int t; cin >> t;
    init_e();
    vector<int> p;
    rep(i, 2, 3000005){
        if(erat[i] == 0) p.push_back(i);
    }
    // cout << p.size() << endl;
    while(t--){
        int n; cin >> n;
        int prime = erat[n];
        if(prime == 0){
            cout << "P" << endl;
            continue;
        }

        // n以下の素数かつprimeをかけると nを超えるものを数えたい
        auto r = upper_bound(p.begin(), p.end(), n);
        auto l = upper_bound(p.begin(), p.end(), n/prime);
        // cout << r-l << ' ' << n-2-(r-l) << endl;
        int cnt = n-2-(r-l);
        if(cnt%2 == 1) cout << "K" << endl;
        else cout << "P" << endl;
        



    }
    return 0;
}
0