sieve: improvement

This commit is contained in:
Dmitry Kokorin 2016-04-01 17:25:34 +03:00
parent c065f71eb9
commit f478d6feca

View file

@ -1,5 +1,6 @@
#include "sieve.h" #include "sieve.h"
namespace sieve { namespace sieve {
using namespace std; using namespace std;
@ -10,19 +11,21 @@ primes_t primes(size_t n)
vector<char> sieve(n, false); vector<char> 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]) if (sieve[p])
continue; continue;
result.push_back(p); for (size_t i = p2; i < n; i += p) {
for (size_t i = p*p; i < n; i += p) {
sieve[i] = true; sieve[i] = true;
} }
} }
for (size_t i = 2; i < n; ++i)
if (!sieve[i])
result.push_back(i);
return result; return result;
} }