// -*- mode: c++ -*-
// $Id: sieve.g++,v 1.5 2001/06/20 03:20:03 doug Exp $
// http://www.bagley.org/~doug/shootout/
// From Bill Lear
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[]) {
size_t NUM = (argc == 2 ? (atoi(argv[1]) < 1 ? 1 : atoi(argv[1])): 1);
vector<char> primes(8192 + 1);
vector<char>::iterator pbegin = primes.begin();
vector<char>::iterator begin = pbegin + 2;
vector<char>::iterator end = primes.end();
while (NUM--) {
fill(begin, end, 1);
for (vector<char>::iterator i = begin; i != end; ++i) {
if (*i) {
const size_t p = i - pbegin;
for (vector<char>::iterator k = i + p; k <= end; k += p) {
*k = 0;
}
}
}
}
cout << "Count: " << count(begin, end, 1) << endl;
}