读完题目之后思路就出来了 但是不敢下手怕时间过不去1e7感觉好大
就是类似埃筛的方法将1e7以内该跳过的数都筛出来 加入在set里面
最后查询的话直接log就可以了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=1e7+5;
int vis[maxn];
int T,x;
set<int>mp;
set<int>::iterator id;
bool seven(int u){
while(u){
if(u%10==7)return true;
u/=10;
}
return false;
}
void init(){
for(int i=1;i<maxn;i++)
if(!vis[i]&&seven(i))
for(int j=1;j*i<maxn;j++)
vis[i*j]=1;
for(int i=1;i<maxn;i++)
if(!vis[i])mp.insert(i);
}
int main(){
cin>>T;
init();
while(T--){
scanf("%d",&x);
if(vis[x])cout<<-1<<endl;
else {
id=mp.find(x);id++;
printf("%d\n",*id);
}
}
return 0;
}