O desafio
Implemente a peneira Sundaram para encontrar os números primos abaixo n. Pegue um número inteiro de entrada ne dê os números primos abaixo n. Você pode assumir que nsempre será menor ou igual a um milhão.
Peneira
Comece com uma lista dos números inteiros de
1atén.Remova todos os números que estão no formulário em
i + j + 2ijque:iejsão menores quen.jé sempre maior que ou igual ai, que é maior que ou igual a1.
i + j + 2ijé menor ou igual an
Multiplique os números restantes por
2e adicione1.
Isso produzirá todos os números primos (exceto os 2que devem ser incluídos na sua saída) inferiores a 2n + 2.
Aqui está uma animação da peneira usada para encontrar os números primos abaixo 202.

Resultado
Sua saída deve ser todo número inteiro primo ≤ n(em ordem crescente) seguido por uma nova linha:
2
3
5
Onde né 5.
Exemplos
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
As entradas são indicadas por >.
(i,j)com i<=j, mas o resultado não muda se ignorarmos esse requisito. Podemos fazer isso para salvar bytes?
i <= j. É apenas parte de como a peneira funciona. Então, sim, você pode deixar de fora o i <= jcódigo. @xnor
2n+1) que não são da forma 2(i + j + 2ij)+1- podemos testar essa propriedade diretamente nos primos em potencial ou nosso código precisa fazer os tempos 2 mais 1 em algum momento ?
nestá na coisa toda. Na descrição do método, ele diz que irá gerar todos os números primos até 2 * n + 2. Mas na descrição de entrada / saída, diz que a entrada é ne a saída é iniciada até n. Então, devemos aplicar o método para gerar todos os números primos até 2 * n + 2, e depois largar os que forem maiores do que npara a saída? Ou devemos calcular a ndescrição do método a partir da entrada n?
n=30está faltando 29 na saída.