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; +}