题目描述
本题已更新,从判断素数改为了查询第 小的素数
提示:如果你使用 cin 来读入,建议使用 std::ios::sync_with_stdio(0) 来加速。
如题,给定一个范围 ,有 个询问,每次输出第 小的素数。
输入格式
第一行包含两个正整数 ,分别表示查询的范围和查询的个数。
接下来 行每行一个正整数 ,表示查询第 小的素数。
输出格式
输出 行,每行一个正整数表示答案。
样例
【样例输入】
100 5
1
2
3
4
5
【样例输出】
2
3
5
7
11
数据范围与提示:2*10000000<n<100000000;1<q<100000,保证查询的素数不大于 n。
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0);
int n,q,cnt=0;
cin>>n>>q;
vector<bool> b(n+1,true);
vector<int> a;
b[0]=b[1]=false;
for(int i=2;i<=n;i++){
if(b[i]==true){
a.push_back(i);
cnt++;
}
for(int j=0;j<cnt&&i*a[j]<=n;j++){
b[a[j]*i]=false;
if(i%a[j]==0) break;
}
}
vector<int> s(q);
for(int i=0;i<q;i++) cin>>s[i];
for(int i=0;i<q;i++){
int k=s[i];
cout<<a[k-1]<<endl;
}
return 0;
}
只拿了 20分,其他全都TLE。
请帮忙调一下。