这题忽悠了我很久,一开始用的埃氏筛选,然后次次rerererererererere。
题目内容如下: 一开始我用的埃氏筛选,然后总是过不了,然后上网查阅,终知它的改进-----
欧拉筛选:
即在埃氏筛选的基础上,判断一个条件:最小公倍数。使它的时间复杂度进一步的缩小。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1;
int ans[N];
bool b[N];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
int n,t,z;
cin>>n>>t;
for(int w=1,i=2;i<=n;i++)
{
if(b[i]!=1)//素数判定
{
ans[w]=i;
w++; //w为cnt同义
}
for(int j=1;j<w&&i*ans[j]<=n;j++)
{
b[i*ans[j]]=1; //非素数的判定
if(i%ans[j]==0)break; //关键点,可以减少重复循环。
}
}
while(t--)
{
cin>>z;
cout<<ans[z]<<endl;
}
}