第n小的质数
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
输入一个正整数n,求第n小的质数。
输入
- 一个不超过10000的正整数n。 输出
- 第n小的质数。 样例输入
-
10
样例输出
-
29
基本版
-
//noi_8163 #include<iostream> using namespace std; int main(){ int n,a[105005]={0},b[10001]={0}; int x=1; // a[20]=1; cin>>n; for(int i=2;i<=105000;i++){ if(a[i]==1) continue; b[x]=i; x++; for(int r=2*i;r<=105000;r=r+i){ a[r]=1; } } // for(int i=1;i<=105005;i++){ // if(a[i]==0) { // b[x]=i; // x++; // } // } // freopen("t1.out","w",stdout); // for(int i=1;i<=sizeof(b)/sizeof(int);i++){ // cout<<i<<' '<<b[i]<<endl; // } cout<<b[n]; return 0; }
最终版(空间换时间,打表)
-
//noi_8163 #include<iostream> using namespace std; int main(){ int n,a[105005]={0},b[10001]={0}; int x=1; cin>>n; for(int i=2;i<=105000;i++){ if(a[i]==1) continue; b[x]=i; x++; for(int r=2*i;r<=105000;r=r+i){ a[r]=1; } } cout<<b[n]; return 0; }
究极版(时间,内存较上一版本减少)
-
#include<iostream> using namespace std; int main(){ int n,a[105005]={0},i,r; cin>>n; for(i=2;i<=105000;i++){ if(a[i]) continue; n--; if(n==0) break; for(r=2*i;r<=105000;r=r+i){ a[r]=1; } } cout<<i; return 0; }