题目 链接
注释版代码
#include<bits/stdc++.h>
using namespace std;
vector<long long>q;
int vis[100000009];//用来判断是否为素数
void ola (long long x)
{
long long i,j;
for(i=2;i<=x;i++)
{
if (vis[i]==0)//如果是素数
q.push_back(i);
for(j=0;j<q.size();j++)//遍历所有素数
{
if (q[j]*i>x) //此时越界,直接停止遍历
break;
vis[q[j]*i]=1; //素数乘一个数必为合数
if (i%q[j]==0) //如果q[j]是i的最小质因子,停止遍历,比埃氏筛优化的地方
break; //一个合数不会被多次筛到
}
}
}
int main ()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long n,t;
long long x,k,i;
cin>>n>>t;
ola(n);
for(i=1;i<=t;i++)
{
cin>>x;
cout<<q[x-1]<<endl;
}
return 0;
}