注意用map容器插入查找才不会超时 #include <iostream> #include <cmath> #include <map> using namespace std; bool is_prime(int m) { if(m == 2) return true; else { for(int i=2;i<=sqrt(double(m));i++) { if(m % i == 0) return false; } } return true; } int main() { map<int,int> int_map; map<int,int>::iterator p; int t=1; for(int i=2;i<1000000;i++) { if(is_prime(i)) { int_map.insert(pair<int,int>(i,t)); t++; } } int m; while( cin>>m && m != -1) { p=int_map.find(m); cout<<p->second<<endl; } return 0; }