#include <iostream> #include <set> using namespace std; const int maxn=1e8+10; set<int> s; bool nosu[maxn]; int main() { int num=0; for(int i=2; i<=2000000; i++) { if(!nosu[i]) { for(int j=i+i; j<=2000000; j+=i) { nosu[j]=1; } } } for(int i=2; i<=2000000; i++) { if(!nosu[i]) { s.insert(i); } } for(set<int>::iterator it=s.begin(); it!=s.end(); it++) { num++; if(num==100002) { cout<<(*it)<<endl; break; } } return 0; }
第一题筛子,数组得开地尽量大,筛掉质数的倍数。