输入量比较大用了快读,结果全错,显示输出的都是0,本地IDE运行没问题。以下是代码
#include <iostream>
#include<cmath>
using namespace std;
const int N = 1e8 + 10, N2 =4000000;
bool flag[N];//直接标记0,1
int prime[N2], cnt;//prime用来存放质数
inline int read() {
int ans = 0; char temp = getchar();
while (temp < '0' && temp>'9') temp = getchar();
while (temp >= '0' && temp <= '9') {
ans = ans * 10 + temp - '0';
temp = getchar();
}
return ans;
}
int main() {
flag[0] = flag[1] = 1;
int n, q ;
cin >> n >> q;
for (int i = 2; i <= n; i++) {
if (!flag[i]) prime[++cnt] = i;
for (int j = 1; j <= cnt; j++) {
if (i * prime[j] > n) break;
flag[i * prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
for (int i = 0; i < q; i++) {
int q_now;
cin >> q_now;
printf("%d\n", prime[q_now]);
}
}