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