RT 原本代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1,M=1e6+1;
bool isprime[N];
int n,q,prime[M],x;
void opao(){
memset(isprime,1,sizeof isprime);
isprime[1]=0;
for(int i=2;i<=n;i++){
if(isprime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
isprime[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>q;
opao();
while(q--)cin>>x,cout<<prime[x]<<endl;
return 0;
}
TLE
改后:
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1,M=1e6+1;
bool isprime[N];
int prime[M],T,x,n;
void opao(){
memset(isprime,1,sizeof isprime);
isprime[1]=0;
for(int i=2;i<=n;i++){
if(isprime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&i*prime[j]<=n;j++){
isprime[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>T;
opao();
while(T--)cin>>x,cout<<prime[x]<<endl;
return 0;
}
通过
