Plus précisément, le PRIMEGAME de Conway .
Il s'agit d'un algorithme conçu par John H. Conway pour générer des nombres premiers en utilisant une séquence de 14 nombres rationnels:
A B C D E F G H I J K L M N
17 78 19 23 29 77 95 77 1 11 13 15 15 55
-- -- -- -- -- -- -- -- -- -- -- -- -- --
91 85 51 38 33 29 23 19 17 13 11 14 2 1
Par exemple, F est la fraction 77/29
.
Voici donc comment l'algorithme trouve les nombres premiers. En commençant par le nombre 2
, recherchez la première entrée de la séquence qui, lorsqu'elle est multipliée, produit un entier. Ici , il est M
, 15/2
qui produit 15
. Ensuite, pour cet entier 15
, recherchez la première entrée de la séquence qui, multipliée, produit un entier. C'est le dernier,, N
ou 55/1
, qui cède 825
. Notez la séquence correspondante. (Les plus avisés d'entre vous peuvent reconnaître cela comme un programme FRACTRAN .)
Après quelques itérations, vous obtiendrez les éléments suivants:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Notez que le dernier élément répertorié est 4
, ou 2^2
. Voici notre premier nombre premier (l' 2
exposant) généré avec cet algorithme! Finalement, la séquence ressemblera à ceci:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
Ainsi, donnant les nombres premiers. Il s'agit d' OEIS A007542 .
Le défi
Étant donné un numéro d'entrée n
, soit zéro, soit un indexé (votre choix), vous pouvez soit sortir les premiers n
nombres de cette séquence, soit sortir le n
numéro de cette séquence.
Exemples
Les exemples ci-dessous sortent le n
e terme de la séquence indexée zéro.
n output
5 2275
19 4
40 408
Règles
- Le cas échéant, vous pouvez supposer que l'entrée / sortie s'adaptera au type Integer natif de votre langue.
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
la source
408.0
au lieu de408
par exemple.Réponses:
Python 3 ,
173 165 153 145 145 144 136 135 127 126 125 108 107104 octetsEssayez-le en ligne!
2>>n*2
est2
pourn==0
et0
autrement.103 octets si nous pouvons retourner des flottants.
la source
FRACTRAN , 99 octets
Essayez-le en ligne!
Le programme prend
2*31^n
en entrée, qui est utilisé comme état initial.Toutes les fractions du programme FRACTRAN d'origine ont été divisées par 31 (le premier registre premier inutilisé), de sorte que le programme s'arrête à la nième itération.
la source
Gelée ,
4943 octetsEssayez-le en ligne!
la source
0ọ0¤
estinf
, sinon vous aurait pu réduire ce 42 octets ...Python 3 , 107 octets
Essayez-le en ligne!
Encode la liste des fractions en
zip
ing deux bytestrings contenant des caractères ASCII bas non imprimables.Si
n
est nul, nous renvoyons l'argumentk
; sinon, nous récursions avec de nouveaux paramètres. Notre nouveauk
est la première valeurk*a//b
correspondant à une fraction(a, b)
de la liste telle qu'unk*a//b
entier, c'est-à-direk*a%b<1
.la source
MATL , 50 octets
Essayez-le en ligne!
la source
Hi:
... aww, "Bonjour" à toi aussi, code. :-)J ,
116110octetsEssayez-le en ligne!
Indexé 0; renvoie le nième nombre
Certains octets peuvent être enregistrés en rendant le verbe tacite, mais j'ai du mal à faire
^:
fonctionner.Explication:
J décrit les nombres rationnels sous la forme NrD, où N est le numérateur et D est le dénominateur, par exemple
17r91 78r85 19r51 23r38...
j'ai créé 2 listes distinctes pour les numérateurs et les dénominateurs et en ai fait 2 nombres en base 96.1047856500267924709512946135x%&(96#.inv])5405040820893044303890643137x
convertit les nombres de base 96 en listes et construit une liste de fractions en divisant les deux listes.2
commencer par 2^:y
répéter le verbe à sa gauchen
(y est l'argument de la fonction)]
le bon argument (commence à 2, puis utilise le résultat de chaque itération)*
multiplier la liste des fractions par le bon argument(=<.)
sont les résultats entiers (comparer chaque nombre avec son plancher){.@I.@
trouve l'indexI.
du premier{.
des entiers{[
utilise l'index pour récupérer le nombrela source
('0m26<l~l *,..V'%&(31x-~3&u:)'ztRE@<620,*-! ')&(0{*#~0=1|*)2:
05AB1E ,
4443 octets0 indexé
Essayez-le en ligne!
Explication
Le grand nombre poussé est
17781923297795770111131515559185513833292319171311140201
la source
Pari / GP , 121 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
10695 octetsEssayez-le en ligne!
la source
Buffer
. De plus, je pense qu'il est sûr de mettre toutes les données dans un seul tampon: 95 octets .Rétine , 213 octets
Essayez-le en ligne! Explication:
Remplacez l'entrée par une liste de toutes les fractions, plus l'entier initial.
Convertissez tout en unaire.
Répétez la substitution le nombre de fois donné par l'entrée d'origine.
Trouvez un dénominateur qui divise également l'entier.
Remplacez l'entier par le résultat de la division multiplié par le numérateur.
Convertissez l'entier en décimal et affichez le résultat.
la source
Attaché , 81 octets
Essayez-le en ligne! Génère une fraction sur 1. Par exemple, l'entrée
5
renvoie2275/1
. Cela peut être corrigé avec plus de 2 octets en ajoutantN@
au programme.Explication
Il s'agit d'une fonction curry, qui curry
Nest
avec deux arguments prédéfinis:et
2
. Ce dernier argument est simplement la graine initiale, et l'argument qui est passé à cette fonction est le nombre d'itérations pour imbriquer la fonction donnée.Ce qui suit est utilisé pour encoder PRIMEGAME:
Ceci est évalué comme tel:
Remplaçons cette expression par
G
dans l'explication. Notre première fonction devient:Cela effectue une seule itération de code FRACTRAN sur
_
, l'entrée de la fonction. C'estFind
unIntegral
membre (un entier) du tableau_*G
, qui est l'entrée_
multipliée par chaque membre deG
.Nest
applique simplement cette transformation le nombre de fois donné.Attaché, 42 octets
J'ai implémenté des parties de la
$langs
bibliothèque, étant inspiré par ce défi, je marque donc cette section non concurrente.Cela interroge simplement la liste que
FRACTRAN_EXAMPLES
j'ai. Chaque exemple est uneFractranExample
instance, qui appelle laFRACTRAN
fonction intégrée . L'prime
exemple est PRIMEGAME de Conway.la source
F # (Mono) , 215 octets
Essayez-le en ligne!
la source
PHP, 183 octets (189 avec la balise "php")
Golfé:
Non golfé:
Essayez-le en ligne!
la source