結果

問題 No.577 Prime Powerful Numbers
ユーザー CZS_AK_IOI2025
提出日時 2025-04-25 22:22:37
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,524 bytes
コンパイル時間 2,212 ms
コンパイル使用メモリ 201,136 KB
実行使用メモリ 73,596 KB
最終ジャッジ日時 2025-04-25 22:22:50
合計ジャッジ時間 6,241 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 1
other AC * 1 TLE * 1 -- * 8
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#define int long long
namespace CZS_Office{
	inline int read(){
		int x=0,f=1;
		char ch=getchar();
		while(ch<'0'||ch>'9'){
			if(ch=='-')f=-1;
			ch=getchar();
		}
		while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
		return x*f;
	}
	inline void write(int x){
		if(x<0){
			putchar('-');
			x=-x;
		}
		if(x>9)write(x/10);
		putchar(x%10+'0');
		return;
	}
}
using namespace std;
using namespace CZS_Office;
int n,prime[6000005],prcnt;
bool isp[10000005],isCZS[10000005],dp[10000005];
vector<int>ntt;
inline void init(){
	for(int i=2;i<=10000000;++i){
		if(!isp[i])prime[++prcnt]=i;
		for(int j=1;j<=prcnt&&prime[j]*i<=10000000;++j){
			isp[prime[j]*i]=1;
			if(i%prime[j]==0)break;
		}
	}
	for(int i=1;i<=prcnt;++i)
	for(int res=prime[i];res<=10000000;res*=prime[i])isCZS[res]=1;
	for(int i=1;i<=10000000;++i)if(isCZS[i])ntt.push_back(i);
	return;
}
unordered_map<int,bool>mp;
inline bool chk(int x){
	for(int i=1;i<=prcnt;++i){
		int res=prime[i];
		while(res<=x){
			if(x==res)return 1;
			res*=prime[i];
		}
	}
	return 0;
}
inline bool liliang(int x){
	if(x<=10000000){
		for(auto i:ntt)if(isCZS[x-i])return 1;
		return 0;
	}
	if(mp.count(x))return mp[x];
	if(x%2==0){
		return 1;
//		return mp[x]=0;
	}
	else{
		for(int i=2;i<=x;i*=2){
			if(chk(x-i))return mp[x]=1;
		}
		return mp[x]=0;
	}
	for(auto i:ntt)if(isCZS[x-i])return mp[x]=1;
	return mp[x]=0;
}
signed main(){
	init();int Q=read();
	while(Q--){
		int n=read();
		if(liliang(n))cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}
0