#include<cstdio>
using namespace std;
int prime[1000001], h = 0;
int vis[100000001];
int main ()
{
int n, q, x;
scanf("%d%d", &n, &q);
vis[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!vis[i])
prime[h++] = i;
for(int j = 0; j < h && i * prime[j] < n; j++)
{
vis[i*prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
for(int i = 1; i <= q; i++)
{
scanf("%d",&x);
printf("%d\n",prime[x-1]);
}
return 0;
}
我先开 prime
数组,然后提交就是 RE
#include<cstdio>
using namespace std;
int vis[100000001];
int prime[1000001], h = 0;
int main ()
{
int n, q, x;
scanf("%d%d", &n, &q);
vis[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!vis[i])
prime[h++] = i;
for(int j = 0; j < h && i * prime[j] < n; j++)
{
vis[i*prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
for(int i = 1; i <= q; i++)
{
scanf("%d",&x);
printf("%d\n",prime[x-1]);
}
return 0;
}
就很神奇
但是我先开 vis
数组,提交就能 AC