結果
問題 |
No.577 Prime Powerful Numbers
|
ユーザー |
|
提出日時 | 2025-05-02 10:34:23 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,149 bytes |
コンパイル時間 | 2,278 ms |
コンパイル使用メモリ | 195,848 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-05-02 10:34:31 |
合計ジャッジ時間 | 8,301 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 9 WA * 1 |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; int prime[1000010],len; bitset<10000010>vis; inline void modadd(ll &a,ll b,const ll MOD){a += b;if(a >= MOD){a -= MOD;}} ll qmul(ll A,ll B,const ll MOD){ ll res = 0; while(B){ if(B&1){modadd(res,A,MOD);} modadd(A,A,MOD); B >>= 1; } return res; } ll qpow(ll A,ll B,const ll MOD){ ll res = 1; while(B){ if(B&1){res = qmul(res,A,MOD);} A = qmul(A,A,MOD); B >>= 1; } return res; } void init(){ vis[0] = vis[1] = 1; for(int i = 2;i <= 10000000;++i){ if(!vis[i]){prime[++len] = i;} for(int j = 1;j <= len&&prime[j]*i <= 10000000;++j){ vis[prime[j]*i] = 1; if(i%prime[j] == 0){break;} } } for(int i = 3500;i >= 2;--i){ if(vis[i]){continue;} for(ll j = i*i;j <= 10000000;j *= i){vis[j] = 0;} } } bool Miller_Rabin(const ll x,const ll base){ ll u = x-1; while(!(u&1)){u >>= 1;} ll v = qpow(base,u,x); if(v == 1){return 1;} while(u < x-1){ if(v == x-1){return 1;} v = qmul(v,v,x); u <<= 1; } return 0; } bool isprime(ll x){ if(x <= 1){return 0;} ll checkbase[8] = {2,3,5,7,11,13,17,37}; for(int i = 0;i < 8;++i){ if(x == checkbase[i]){return 1;} if(x%checkbase[i] == 0){return 0;} if(!Miller_Rabin(x,checkbase[i])){return 0;} } return 1; } bool check(ll x){ // if(x <= 10000000){return (!vis[x]);} if(isprime(x)){return 1;} for(int i = 1;i <= len;++i){ if(x%prime[i] == 0){ while(x > 1&&x%prime[i] == 0){x /= prime[i];} return x == 1; } } ll tmp = sqrt(x); if(tmp*tmp == x&&isprime(tmp)){return 1;} if((tmp+1)*(tmp+1) == x&&isprime((tmp+1))){return 1;} return 0; } void solve(){ ll N;cin >> N; if(N&1){ for(ll j = 2;j < N;j <<= 1){if(check(N-j)){cout << "Yes\n";return;}} cout << "No\n";return; } cout << "Yes\n";return; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); // freopen("number.in","r",stdin); // freopen("number.out","w",stdout); int T = 1;cin >> T;init(); for(int i = 1;i <= T;++i){solve();} return 0; }