Contexte
Considérez la séquence suivante ( A051935 dans OEIS):
- Commencez par le terme .
- Trouvez le plus petit entier supérieur à tel que est premier.2 2 + n
- Trouver le plus petit entier supérieur à tel que est premier, etc. n 2 + n + n ′
Une définition plus formelle:
Les premiers termes de la séquence sont (veuillez les appeler des cas de test):
2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...
Tâche
Votre tâche consiste à générer cette séquence de l'une des manières suivantes:
- Sortir ses termes indéfiniment.
- Étant donné , (terme , ou indexé).
- Étant donné , sortez ( n premiers termes).
Vous pouvez concurrencer dans n'importe quel langage de programmation et pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode standard , tout en prenant note que ces failles sont interdites par défaut. C'est du code-golf , donc la soumission la plus courte (en octets) pour chaque langue l' emporte.
Réponses:
Brachylog , 13 octets
Essayez-le en ligne!
La sortie est la liste des n premiers termes de la séquence.
la source
Python 2 ,
6362 octetsEssayez-le en ligne!
la source
Gelée ,
119 octetsIl s'agit d'un programme complet qui prend n comme argument et affiche les n premiers termes de la séquence.
Essayez-le en ligne!
Comment ça fonctionne
la source
05AB1E v2 , 10 octets
Essayez-le en ligne!
Cela ne fonctionne que dans la version non héritée, la réécriture Elixir. Génère un flux infini d'entiers. Il y a quelques bugs avec le test principal qui ont été corrigés dans les derniers commits, mais qui ne sont pas encore en direct sur TIO. Cela fonctionne cependant localement. Voici un GIF de son exécution sur ma machine, modifié pour sortir les premiers termes plutôt que le flux entier.
Comment ça fonctionne
Définit une séquence infinie récursive avec le cas de base . La structure fait partie des nouvelles fonctionnalités très intéressantes de 05AB1E. En bref, il prend une fonction , mettant l'argument entier donné, dans ce cas .a ( n ) a ( 0 ) 22 a(n) a(0) 2
λ
Dans cette partie du code,[a(0),a(1),…,a(n−1)]
λ
le rôle de est différent. Déjà dans un environnement récursif, il génère à la place , la liste de tous les résultats précédents. Ensuite, les résume.O
Dupliquez la somme pour une utilisation ultérieure et ajoutez à la deuxième copie.a(n−1)
Génère le plus petit nombre premier strictement supérieur à la somme ci-dessus.
Enfin, récupérez la différence absolue entre le premier calculé ci-dessus et la première copie de la somme calculée précédemment (la somme de toutes les itérations précédentes).
Le flux est ensuite implicitement imprimé dans STDOUT indéfiniment.
la source
Perl 6 , 45 octets
Essayez-le en ligne!
Renvoie une liste paresseuse qui génère la séquence sans fin.
Explication:
Celui-ci utilise l'opérateur Sequence
...
qui définit la séquence comme:la source
Rubis
-rprime
, 34 octetsEssayez-le en ligne!
Sorties indéfiniment.
la source
JavaScript (ES6), 63 octets
Renvoie le terme, indexé sur 1.nth
Essayez-le en ligne!
la source
Pyth ,
1211 octetsEssayez-le en ligne!
1 octet enregistré grâce à isaacg.
Génère les premiers de
n
ces nombres, en utilisant un index basé sur 1..f
trouve les premiersk
entiers qui satisfont un critère particulier à partir de zéro. Ici, le critère est que le premier précédent que nous avons calculé;
, plus le nombre actuelZ
, est premier (P
). Si c'est le cas, nous mettons également à jour le dernier nombre premier calculé en utilisant le comportement de court-circuitage de la logique et de la fonction (&
). Malheureusement,.f
la variable par défaut est celleZ
qui coûte un octet dans la mise à jour.L'astuce qui isaacg a compris était de stocker la négation du dernier nombre premier et de tester sur celle moins la valeur actuelle. Ceci est plus court en Pyth car le contrôle de primalité est surchargé: sur les nombres positifs, il trouve la factorisation première tandis que sur les nombres négatifs, il détermine si la valeur positive du nombre est premier.
Cela se traduit plus ou moins par:
la source
_+
par-
et+
par-
pour -1 octet.MATL , 21 octets
Essayez-le en ligne!
La sortie est les n premiers termes de la séquence.
Explication:
Construit une liste de nombres premiers (avec un 0 initial), et à la fin trouve les retours des différences entre les nombres premiers successifs dans la liste.
la source
Haskell , 67 octets
Essayez-le en ligne!
(1#1)2 2
est une fonction qui ne prend aucune entrée et génère une liste infinie.ancienne réponse:
Haskell ,
88837876 octetsLe test de primalité est issu de cette réponse et amélioré par Christian Sievers (-2 octets).
-5 octets grâce à WW .
Essayez-le en ligne!
la source
^2
. Cela changera le prédicat de testing is prime à testing is prime ou 4 , ce qui n'a pas d'importance dans cette application.05AB1E (hérité) , 12 octets
Essayez-le en ligne!
Explication
Il existe plusieurs solutions différentes sur 12 octets.
Celui-ci aurait pu être de 10 octets si nous avions une variable utilisable initialisée à 0 (au lieu de 1 et 2).
la source
Python 2 , 119 octets
Essayez-le en ligne!
Fonction Prime suivante f () tirée de cette réponse .
La fonction g () prend un entier non négatif i et retourne une liste de tous les éléments de la séquence jusqu'à cet index.
la source
Python 2 ,
9998 octetsEssayez-le en ligne!
1 octet merci à M. Xcoder .
la source
k=s-~v
.Haskell ,
101 9997 octetsLa fonction
l
ne prend aucun argument et renvoie une liste infinie. Pas aussi court que l' approche plus directe de @ovs (et j'ai évidemment volé certaines parties de leur réponse), mais peut-être quand même jouable au golf?Merci @ H.PWiz pour -2 octets!
Essayez-le en ligne!
la source
Python 2 ,
8280 octetsEssayez-le en ligne!
Ceci sort le nième numéro de la séquence (basé sur 0). En déplaçant le
print
dans la boucle, cela peut être modifié pour sortir les premiersn
éléments au même bytecount: Essayez-le en ligne!la source
C (gcc) ,
10099 octetsEssayez-le en ligne!
la source
Japt, 17 octets
Produit le
n
e terme, indexé sur 0.Essayez-le
la source