Le défi
Implémentez le tamis Sundaram pour trouver les nombres premiers ci-dessous n. Prenez un entier en entrée n, et sortez les nombres premiers ci-dessous n. Vous pouvez supposer qu'il nsera toujours inférieur ou égal à un million.
Tamis
Commencez par une liste des entiers de
1àn.Supprimez tous les numéros du formulaire
i + j + 2ijoù:ietjsont inférieurs àn.jest toujours supérieur ou égal ài, ce qui est supérieur ou égal à1.
i + j + 2ijest inférieur ou égal àn
Multipliez les nombres restants par
2et ajoutez1.
Cela donnera tous les nombres premiers (sauf ceux 2qui devraient être inclus dans votre sortie) inférieurs à2n + 2 .
Voici une animation du tamis utilisé pour trouver les nombres premiers ci-dessous 202.

Production
Votre sortie doit être chaque entier premier ≤ n(dans l'ordre croissant) suivi d'une nouvelle ligne:
2
3
5
Où nest 5.
Exemples
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
Les entrées sont désignées par >.
(i,j)qu'avec i<=j, mais le résultat ne change pas si nous ignorons cette exigence. Pouvons-nous le faire pour économiser des octets?
i <= j. Cela fait juste partie du fonctionnement du tamis. Alors oui, vous pouvez laisser de côté le i <= jdans votre code. @xnor
2n+1) qui ne sont pas de la forme2(i + j + 2ij)+1 - peut - on tester cette propriété directement sur les nombres premiers potentiels ou ne notre code ont à faire les temps 2 plus 1 à un moment donné ?
ny a dans tout ça. Dans la description de la méthode, il indique qu'il générera tous les nombres premiers jusqu'à 2 * n + 2. Mais dans la description entrée / sortie, il est dit que l'entrée est n, et la sortie est tout d'abord jusqu'à n. Sommes-nous donc censés appliquer la méthode pour générer tous les nombres premiers jusqu'à 2 * n + 2, puis supprimer ceux plus grands que npour la sortie? Ou devrions-nous calculer la ndans la description de la méthode à partir de l'entrée n?
n=30manque 29 dans la sortie.