代码如下
#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e7+9;
int T;
int vvis[Maxn],vis2[Maxn],cnt = 1,hht[Maxn];
bool check(int x)
{
while(x!=0) {
if(x%10==7) return 1;
x = x/10;
}
return 0;
}
void iinit()
{
for(int i = 1;i <= Maxn;i++)
{
if(vvis[i] == 1) continue;
if(check(i))
{
for(int j = 1;i*j <= Maxn;j++) vvis[i*j] = 1;
}
else
{
vis2[cnt] = i;
hht[i] = cnt;
cnt++;
}
}
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
cin>>T;
iinit();
for(int i = 1;i <= T;i++)
{
int x; cin>>x;
if(vvis[x] == 1){ cout<<-1<<endl; continue;}
cout<<vis2[hht[x]+1]<<endl;
}
return 0;
}
然后很神奇的,把输入和初始化换一下位置,其他什么都不变
#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e7+9;
int T;
int vvis[Maxn],vis2[Maxn],cnt = 1,hht[Maxn];
bool check(int x)
{
while(x!=0) {
if(x%10==7) return 1;
x = x/10;
}
return 0;
}
void iinit()
{
for(int i = 1;i <= Maxn;i++)
{
if(vvis[i] == 1) continue;
if(check(i))
{
for(int j = 1;i*j <= Maxn;j++) vvis[i*j] = 1;
}
else
{
vis2[cnt] = i;
hht[i] = cnt;
cnt++;
}
}
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
iinit();
cin>>T;
for(int i = 1;i <= T;i++)
{
int x; cin>>x;
if(vvis[x] == 1){ cout<<-1<<endl; continue;}
cout<<vis2[hht[x]+1]<<endl;
}
return 0;
}
就AC了,不然全WA