#include <bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
int pre[maxn],nxt[maxn];
bool flag[maxn];
bool pd(int x){
while(x>0){
if((x%10)==7)return false;
x/=10;
}
return true;
}
int main()
{
//freopen("aaa.in","r",stdin);
//freopen("aaa.out","w",stdout);
int T;
scanf("%d",&T);
for(int i=1;i<=10000000;i++){
pre[i]=i-1;
nxt[i]=i+1;
}
for(int i=1;i<=10000000;i++){
if(flag[i])continue;
if(!pd(i)){
for(int j=i;j<=10000000;j+=i){
if(flag[j])continue;
nxt[pre[j]]=nxt[j];
pre[nxt[j]]=pre[j];
flag[j]=true;
}
}
}
int x;
for(int i=1;i<=T;i++){
scanf("%d",&x);
if(flag[x]){
printf("-1\n");
}
else printf("%d\n",nxt[x]);
}
return 0;
}
就是知道这样子照理来说应该会t……
而且pd子函数也不是o(1)
但是谷它300ms就冲过去了
所以觉得是时间复杂度对的
但是这个咋算啊(如何估计……)
求dalao指点