結果
| 問題 |
No.2724 Coprime Game 1
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-04-26 13:44:59 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 400 ms / 2,000 ms |
| コード長 | 1,923 bytes |
| コンパイル時間 | 2,387 ms |
| コンパイル使用メモリ | 203,508 KB |
| 最終ジャッジ日時 | 2025-02-21 09:06:30 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
#include <bits/stdc++.h>
// #include <atcoder/all>
#include <iostream>
#include <math.h>
using namespace std;
// using namespace atcoder;
// using mint = modint998244353;
// using mint = modint1000000007;
using vi = vector<int>;
using vvi = vector<vector<int>>;
using ll = long long;
template <class T> using max_heap = priority_queue<T>;
template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, f, n) for (int i = (int) f; i < (int)(n); i++)
#define repd(i, n, l) for (int i = (int) n; i >= (int) l; i--)
const ll inf = ll(1e9+7);
vector< bool > prime_table(int n) {
vector< bool > prime(n + 1, true);
if(n >= 0) prime[0] = false;
if(n >= 1) prime[1] = false;
for(int i = 2; i * i <= n; i++) {
if(!prime[i]) continue;
for(int j = i * i; j <= n; j += i) {
prime[j] = false;
}
}
return prime;
}
vector< int > enumerate_primes(int n) {
if(n <= 1) return {};
auto d = prime_table(n);
vector< int > primes;
primes.reserve(count(begin(d), end(d), true));
for(int i = 0; i < d.size(); i++) {
if(d[i]) primes.push_back(i);
}
return primes;
}
set< int > create_prime_set( int n){
set<int> ret;
if (n <= 1) return ret;
auto d = prime_table(n);
for (int i = 0; i < d.size(); i++){
if (d[i]) ret.insert(i);
}
return ret;
}
int main() {
int t;
cin >> t;
auto st = create_prime_set(3000009);
auto primes = enumerate_primes(3000009);
rep(_, t){
int n;
cin >> n;
if (st.count(n)) cout << 'P' << endl;
else{
auto it1 = upper_bound(primes.begin(), primes.end(), n);
auto it2 = upper_bound(primes.begin(), primes.end(), n/2);
int pos = (n-2) - (it1 - it2);
if (pos % 2 == 0) cout << 'P' << endl;
else cout << 'K' << endl;
}
}
return 0;
}