diff --git a/README.md b/README.md
index 553e6d24c99a474c80997f4a29ed70023339b292..bc5c4477da48e64e5c9a0411599ec0e2340fb974 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 0000000000000000000000000000000000000000..6bf6c3e3a2b5345d4bcdfc226adb9b91b17c0102
--- /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;
+}