La sfida
Implementa il setaccio Sundaram per trovare i numeri primi di seguito n. Prendi un numero intero di input ne genera i numeri primi di seguito n. Puoi presumere che nsarà sempre inferiore o uguale a un milione.
Setaccio
Inizia con un elenco di numeri interi da
1an.Rimuovi tutti i numeri che si trovano nel modulo in
i + j + 2ijcui:iejsono inferiori an.jè sempre maggiore o uguale ai, che è maggiore o uguale a1.
i + j + 2ijè inferiore o uguale an
Moltiplica i numeri rimanenti per
2e aggiungi1.
Ciò produrrà tutti i numeri primi (tranne 2, che dovrebbero essere inclusi nell'output) in meno di 2n + 2.
Ecco un'animazione del setaccio utilizzato per trovare i numeri primi di seguito 202.

Produzione
L'output dovrebbe essere ogni numero intero primo ≤ n(in ordine crescente) seguito da una nuova riga:
2
3
5
Dove nsi trova 5.
Esempi
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
Gli ingressi sono indicati da >.
(i,j)con i<=j, ma il risultato non cambia se ignoriamo questo requisito. Possiamo farlo per salvare byte?
i <= j. Fa solo parte di come funziona il setaccio. Quindi sì, puoi tralasciare il i <= jcodice. @xnor
2n+1) che non sono del modulo 2(i + j + 2ij)+1- possiamo testare questa proprietà direttamente sui numeri primi potenziali o il nostro codice deve fare i tempi 2 più 1 ad un certo punto ?
nè nel complesso. Nella descrizione del metodo, dice che genererà tutti i numeri primi fino a 2 * n + 2. Ma nella descrizione input / output, dice che l'input è n, e l'output è tutto pronto n. Quindi dovremmo applicare il metodo per generare fino a tutti i numeri primi 2 * n + 2e quindi eliminare quelli più grandi rispetto nall'output? O dovremmo calcolare la ndescrizione del metodo dall'input n?
n=30manca 29 nell'output.