From f478d6feca0d20aa0ab086497d1315ca724ec5cc Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Fri, 1 Apr 2016 17:25:34 +0300 Subject: [PATCH] sieve: improvement --- cpp/sieve/sieve.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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; }