// -*- mode: c++ -*- // $Id: sieve.g++,v 1.6 2001/07/11 17:45:46 doug Exp $ // http://www.bagley.org/~doug/shootout/ // From Bill Lear // with help from Stephane Lajoie #include #include #include #include using namespace std; int main(int argc, char *argv[]) { size_t NUM = (argc == 2 ? (atoi(argv[1]) < 1 ? 1 : atoi(argv[1])): 1); vector primes(8192 + 1); vector::iterator pbegin = primes.begin(); vector::iterator begin = pbegin + 2; vector::iterator end = primes.end(); while (NUM--) { fill(begin, end, 1); for (vector::iterator i = begin; i < end; ++i) { if (*i) { const size_t p = i - pbegin; for (vector::iterator k = i + p; k < end; k += p) { *k = 0; } } } } cout << "Count: " << count(begin, end, 1) << endl; }