5 个点全 RE,加了一堆 assert 也没调出来。我哪里错了?
#include <cstdio>
#include <cassert>
#include <bitset>
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
inline void write(int x)
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
std::bitset<100000001> isprime;
int prime[1000001];
void init(int n) {
int p;
for(int i = 2; i <= n; i++) {
assert(i >= 0 && i <= 100000000);
if(!isprime[i]){
assert(p+1 >= 0 && p+1 <= 1000000);
prime[++p] = i;
}
for(int j = 1; j <= p && i * prime[j] <= n; j++) {
assert(j >= 0 && j <= 1000000);
assert(i * prime[j] >= 0 && i * prime[j] <= 100000000);
isprime[i * prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
}
int main() {
int n, q, k;
for(n = read(), q = read(),init(n); q; --q)
write(prime[read()]), putchar('\n');
return 0;
}