Voltar para os desafios
Médio 0 resolvidos 0% de aceitação

Liste Primos com um Crivo

Encontre números primos até um limite marcando múltiplos compostos.

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

Exemplo 1
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.

Exemplo 2
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.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.