http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009&lang=jp
参考:エラトステネスの篩
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
#define _USE_MATH_DEFINES #include <iostream> #include <vector> #include <list> #include <cmath> using namespace std; list<int> Sieve_of_Eratosthenes(int MAX) { list<int> nl,pl; list<int>::iterator it; //自然数の作成 STEP1 for (int i=5; i < MAX; i+=2) { if (i % 3 != 0) { nl.push_back(i); } } pl.push_back(2); pl.push_back(3); while (1) { //STEP2 pl.push_back(nl.front()); //STEP3 for(it=nl.begin(); it!=nl.end(); it++) { if (*it % pl.back() == 0) { *it = 0; } } nl.remove(0); //STEP4 if (pl.back() * pl.back() > nl.back()) { break; } } //後処理 listの結合 pl.merge(nl); return pl; } int main () { list<int>::iterator it; list<int> pl = Sieve_of_Eratosthenes(10000); int n = 0; while (cin >> n) { int count = 0; for (it = pl.begin(); it != pl.end() ;it++) { if (*it <= n) { count++; }else { break; } } cout << count << endl; } return 0; }