Problema
Ver original (inglês)Retorne todos os números primos de 2 até limit. Um primo é um inteiro maior que 1 divisível apenas por 1 e por ele mesmo. Use a ideia do crivo: mantenha o próximo número não marcado e marque seus múltiplos maiores como compostos. Liste os resultados em ordem crescente.
Implemente sieve_primes(limit).
Entrada
limit: O maior número que pode ser incluído.
Saída
Retorne os primos em ordem crescente, ou uma lista vazia se não houver nenhum.
Restrições
0 ≤ limit ≤ 100.000. O limite superior é inclusivo. Os testes de saída verificam os resultados, não o algoritmo exato utilizado.
Exemplos
Entrada:
limit = 12
Saída esperada:
expected = [2, 3, 5, 7, 11]
Entrada:
long long limit = 12;
Saída esperada:
std::vector<long long> expected = {2, 3, 5, 7, 11};
Entrada:
long limit = 12;
Saída esperada:
long[] expected = new long[] {2, 3, 5, 7, 11};
Explicação
Marque os múltiplos de 2 e 3 como compostos. Os valores restantes até 12 são 2, 3, 5, 7 e 11.
Entrada:
limit = 1
Saída esperada:
expected = []
Entrada:
long long limit = 1;
Saída esperada:
std::vector<long long> expected = {};
Entrada:
long limit = 1;
Saída esperada:
long[] expected = new long[] {};
Explicação
Os números primos começam em 2, acima deste limite.
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.