RT,洛谷AC,最慢113ms,正式比赛能过吗
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstdlib>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
using namespace std;
#define M 10000010
typedef long long ll;
int ok[M],m,mp[M];
bool isok[M];
bool seven(int x){
while(x){
if(x%10==7)
return 1;
x/=10;
}
return 0;
}
int read(){
char ch=getchar();
int ans=0;
while(ch!='\n'){
ans=(ans<<3)+(ans<<1)+(ch-'0');
ch=getchar();
}
return ans;
}
int n,x;
int main(){
for(int i=1;i<M;i++){
if(!isok[i])
if(seven(i)){
isok[i]=1;
for(int j=i;j<M;j+=i)
isok[j]=1;
}
if(!isok[i])
ok[++m]=i;
mp[i]=m;
}
n=read();
for(int i=1;i<=n;i++){
x=read();
if(isok[x])printf("-1\n");
else printf("%d\n",ok[mp[x]+1]);
}
return 0;
}