From 817167a06b7de18c3f35fbcda6dc6704a369b720 Mon Sep 17 00:00:00 2001 From: Bruno Freitas Tissei <bft15@inf.ufpr.br> Date: Wed, 13 Feb 2019 16:38:32 -0200 Subject: [PATCH] Add Sieve of Eratosthenes Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br> --- README.md | 2 -- math/sieve_of_eratosthenes.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 math/sieve_of_eratosthenes.cpp diff --git a/README.md b/README.md index 553e6d2..bc5c447 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ # Implementações de algoritmos e resoluções de problemas; estudo, treino e consulta para programação competitiva (maratona de programação) Os algoritmos estão classificados por area de estudo e todos eles estão listados nas Issues. - -A seleção dos problemas e contests foi feita com base na minha necessidade e curiosidade de aprender assuntos especÃficos. diff --git a/math/sieve_of_eratosthenes.cpp b/math/sieve_of_eratosthenes.cpp new file mode 100644 index 0000000..6bf6c3e --- /dev/null +++ b/math/sieve_of_eratosthenes.cpp @@ -0,0 +1,26 @@ +/** + * Sieve of Eratosthenes + * + * Complexity (Time): O(n*log(log(n))) + * Complexity (Space): O(n) + */ + + +// Returns vector of primes less than or equal to n +vector<int> sieve(int n) { + vector<int> primes; + vector<bool> is_prime(n+1, true); + + // Mark which elements are not prime (multiples of p) + for (int p = 2; p*p <= n; ++p) + if (is_prime[p]) + for (int i = p*p; i <= n; i += p) + is_prime[i] = false; + + // Add non-marked elements (primes) to the list + for (int p = 2; p <= n; ++p) + if (is_prime[p]) + primes.pb(p); + + return primes; +} -- GitLab