diff --git a/cpp/sieve/sieve.cpp b/cpp/sieve/sieve.cpp new file mode 100644 index 0000000..bab3b1f --- /dev/null +++ b/cpp/sieve/sieve.cpp @@ -0,0 +1,29 @@ +#include "sieve.h" + +namespace sieve { + +using namespace std; + +primes_t primes(size_t n) +{ + primes_t result; + + vector sieve(n, false); + + for (size_t p = 2; p < n; ++p) { + + if (sieve[p]) + continue; + + result.push_back(p); + + for (size_t i = p*p; i < n; i += p) { + + sieve[i] = true; + } + } + + return result; +} + +} diff --git a/cpp/sieve/sieve.h b/cpp/sieve/sieve.h new file mode 100644 index 0000000..f1472c4 --- /dev/null +++ b/cpp/sieve/sieve.h @@ -0,0 +1,13 @@ +#pragma once + +#define EXERCISM_RUN_ALL_TESTS + +#include + +namespace sieve { + +typedef std::vector primes_t; + +primes_t primes(std::size_t n); + +}