Code ==
#include <stdio.h>
const int SIZE = 1e8 + 5, PRIMES = 1e8;
bool isnp[SIZE];
int primes[SIZE], pos;
void get_primes(int n)
{
for (int i = 2; i <= n; i++)
{
if (!isnp[i])
primes[pos++] = i;
for (int j = 0; j < pos; j++)
{
if (i * primes[j] <= n)
isnp[i * primes[j]] = true;
if (i % primes[j] == 0)
break;
}
}
}
int main()
{
int n, q;
scanf("%d %d", &n, &q);
get_primes(n);
for (int i = 0; i < q; i++)
{
int k;
scanf("%d", &k);
printf("%d\n", primes[k - 1]);
}
return 0;
}
i*primes[j] <= n检查了,质数数组开到了1e8,依旧RE