diff --git a/cpp/sieve/sieve.cpp b/cpp/sieve/sieve.cpp index bab3b1f..cddc280 100644 --- a/cpp/sieve/sieve.cpp +++ b/cpp/sieve/sieve.cpp @@ -1,5 +1,6 @@ #include "sieve.h" + namespace sieve { using namespace std; @@ -10,19 +11,21 @@ primes_t primes(size_t n) vector sieve(n, false); - for (size_t p = 2; p < n; ++p) { + for (size_t p = 2, p2 = 2*2; p2 < n; ++p, p2 = p*p) { if (sieve[p]) continue; - result.push_back(p); - - for (size_t i = p*p; i < n; i += p) { + for (size_t i = p2; i < n; i += p) { sieve[i] = true; } } + for (size_t i = 2; i < n; ++i) + if (!sieve[i]) + result.push_back(i); + return result; }