結果
問題 | No.2724 Coprime Game 1 |
ユーザー |
|
提出日時 | 2024-04-12 22:11:44 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 230 ms / 2,000 ms |
コード長 | 1,687 bytes |
コンパイル時間 | 3,103 ms |
コンパイル使用メモリ | 247,548 KB |
実行使用メモリ | 16,272 KB |
最終ジャッジ日時 | 2024-10-02 23:22:04 |
合計ジャッジ時間 | 4,789 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 7 |
ソースコード
#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/2);// 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;}