O desafio
Implemente a peneira Sundaram para encontrar os números primos abaixo n
. Pegue um número inteiro de entrada n
e dê os números primos abaixo n
. Você pode assumir que n
sempre será menor ou igual a um milhão.
Peneira
Comece com uma lista dos números inteiros de
1
atén
.Remova todos os números que estão no formulário em
i + j + 2ij
que:i
ej
sã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
2
e adicione1
.
Isso produzirá todos os números primos (exceto os 2
que 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 <= j
có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 ?
n
está 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 é n
e 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 n
para a saída? Ou devemos calcular a n
descrição do método a partir da entrada n
?
n=30
está faltando 29 na saída.