小丑竟是我自己
查看原帖
小丑竟是我自己
47137
Komeji楼主2021/11/20 22:50

考场上先预处理数组然后再输出,当时已经跑过大样例了

#include<bits/stdc++.h>
#define ll long long
#define MAXN 10000010

using namespace std;
ll ans[MAXN];
bool f1[MAXN],f2[MAXN];

bool p(ll x){
	
	while(x>0){
		if(x%10==7) return true;
		x/=10;
	}
	return false;
}

inline ll read(){
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0' or ch>'9'){
		if(ch=='-') f=-f;
		ch=getchar();
	}
	while(ch>='0' and ch<='9'){
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	}
	return x*f;
}

int main(){
	
	//freopen("a.in","r",stdin);
	//freopen("a.out","w",stdout);
	
	ll n;
	n=read();
	for(ll i=1;i<=MAXN;i++){
		if(p(i)){
			//cout<<i<<endl;
			for(ll j=i;j<=MAXN;j+=i)
			f1[j]=1;
		}
	}
	
	ll now=1;
	ans[1]=2;
	
	for(ll i=2;i<=MAXN;i++){
		if(!f1[i]){
			ans[now]=i;
			now=i;
		}
		else{
			ans[i]=-1;
		}
	}
	
	
	for(ll i=1;i<=n;i++){
		ll a;
		a=read();
		printf("%lld\n",ans[a]);
	}
	
	return 0;
}

结果我脑子不知道咋想的,老觉得这玩意跑的不够快,就给打表了。。赛后发现源代码空间限制,直接原地去世

~~以下省略20w行打表代码

2021/11/20 22:50
加载中...