考场上先预处理数组然后再输出,当时已经跑过大样例了
#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行打表代码