Insbesondere das PRIMEGAME von Conway .
Dies ist ein Algorithmus, der von John H. Conway entwickelt wurde, um Primzahlen mit einer Folge von 14 rationalen Zahlen zu erzeugen:
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
Zum Beispiel ist F der Bruch 77/29
.
So findet der Algorithmus die Primzahlen. 2
Suchen Sie ausgehend von der Zahl den ersten Eintrag in der Sequenz, der bei Multiplikation eine ganze Zahl ergibt. Hier ist es M
, 15/2
, die produziert 15
. 15
Suchen Sie dann für diese Ganzzahl den ersten Eintrag in der Sequenz, der bei Multiplikation eine Ganzzahl ergibt. Das ist der letzte N
, oder 55/1
, der nachgibt 825
. Schreiben Sie die entsprechende Reihenfolge auf. (Die Schlauen unter Ihnen können dies als ein FRACTRAN- Programm erkennen.)
Nach einigen Iterationen erhalten Sie Folgendes:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Beachten Sie, dass das zuletzt aufgeführte Element 4
oder ist 2^2
. Schauen Sie sich unsere erste 2
mit diesem Algorithmus erzeugte Primzahl (den Exponenten) an! Schließlich sieht die Sequenz folgendermaßen aus:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
So ergeben sich die Primzahlen. Dies ist OEIS A007542 .
Die Herausforderung
Bei einer eingegebenen Nummer n
, entweder null- oder einsindiziert (Ihre Wahl), geben Sie entweder die ersten n
Nummern dieser Sequenz oder die n
th-Nummer dieser Sequenz aus.
Beispiele
In den folgenden Beispielen wird der n
dritte Term der nullindexierten Sequenz ausgegeben.
n output
5 2275
19 4
40 408
Regeln
- Gegebenenfalls können Sie davon ausgehen, dass die Eingabe / Ausgabe in den systemeigenen Integer-Typ Ihrer Sprache passt.
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
408.0
statt408
zum Beispiel.Antworten:
Python 3 ,
173 165 153 145 144 136 135 127 126 125 108 107104 ByteProbieren Sie es online!
2>>n*2
ist2
fürn==0
und0
ansonsten.103 Bytes, wenn wir floats zurückgeben können.
quelle
FRACTRAN , 99 Bytes
Probieren Sie es online!
Das Programm nimmt
2*31^n
als Eingabe, die als Ausgangszustand verwendet wird.Alle Brüche im ursprünglichen FRACTRAN-Programm wurden durch 31 (das erste nicht verwendete Primregister) geteilt, sodass das Programm bei der n-ten Iteration stoppt.
quelle
Jelly ,
4943 BytesProbieren Sie es online!
quelle
0ọ0¤
istinf
, sonst hat man dies könnte auf 42 Bytes reduziert ...Python 3 , 107 Bytes
Probieren Sie es online!
Codiert die Liste der Brüche durch
zip
Eingabe von zwei Bytestrings, die nicht druckbare Niedrig-ASCII-Zeichen enthalten.Wenn
n
Null ist, geben wir das Argument zurückk
. ansonsten greifen wir auf neue Parameter zurück. Unser neuerk
Wert ist der erste Wertk*a//b
, der einem Bruch(a, b)
in der Liste entspricht,k*a//b
also eine ganze Zahl, dk*a%b<1
. H.quelle
MATL , 50 Bytes
Probieren Sie es online!
quelle
Hi:
... aww, "Hallo" auch für dich, Code. :-)J ,
116110 BytesProbieren Sie es online!
0-indiziert; gibt die n-te Zahl zurück
Einige Bytes können gespeichert werden, indem man das Verb tacit macht, aber ich habe Probleme,
^:
Arbeit zu machen.Erläuterung:
J beschreibt die rationalen Zahlen in der Form NrD, wobei N der Zähler und D der Nenner ist. Zum Beispiel habe
17r91 78r85 19r51 23r38...
ich 2 separate Listen für die Zähler und Nenner erstellt und daraus 2 Basis-96-Zahlen erstellt.1047856500267924709512946135x%&(96#.inv])5405040820893044303890643137x
konvertiert die Base-96-Zahlen in Listen und erstellt eine Liste von Brüchen durch Teilen der beiden Listen.2
Beginnen Sie mit 2^:y
Wiederhole das Verb zu seinen linkenn
Zeiten (y ist das Argument für die Funktion)]
das richtige Argument (beginnt bei 2 und verwendet dann das Ergebnis jeder Iteration)*
Multiplizieren Sie die Liste der Brüche mit dem richtigen Argument(=<.)
sind die Ergebnisse ganzzahlig (vergleichen Sie jede Zahl mit ihrem Boden){.@I.@
Findet den IndexI.
der ersten{.
ganzen Zahl{[
Verwendet den Index, um die Nummer abzurufenquelle
('0m26<l~l *,..V'%&(31x-~3&u:)'ztRE@<620,*-! ')&(0{*#~0=1|*)2:
05AB1E ,
4443 Bytes0-indiziert
Probieren Sie es online!
Erläuterung
Die große Zahl ist geschoben
17781923297795770111131515559185513833292319171311140201
quelle
Pari / GP , 121 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
10695 BytesProbieren Sie es online!
quelle
Buffer
. Außerdem halte ich es für sicher, alle Daten in einem einzigen Puffer abzulegen: 95 Bytes .Netzhaut , 213 Bytes
Probieren Sie es online! Erläuterung:
Ersetzen Sie die Eingabe durch eine Liste aller Brüche plus der Anfangszahl.
Wandle alles in Einzahl um.
Wiederholen Sie die Ersetzung so oft wie in der ursprünglichen Eingabe angegeben.
Suchen Sie einen Nenner, der die ganze Zahl gleichmäßig teilt.
Ersetzen Sie die Ganzzahl durch das Ergebnis der Division multipliziert mit dem Zähler.
Wandle die ganze Zahl in eine Dezimalzahl um und gib das Ergebnis aus.
quelle
Attache , 81 Bytes
Probieren Sie es online! Gibt einen Bruch über 1 aus. Beispiel: Eingabe
5
zurückgegeben2275/1
. Dies kann durch Voranstellen mit plus 2 Bytes behoben werdenN@
an das Programm werden.Erläuterung
Dies ist eine Curry-Funktion, die
Nest
mit zwei vordefinierten Argumenten ausgeführt wird:und
2
. Dieses letzte Argument ist einfach der Anfangsstartwert, und das an diese Funktion übergebene Argument gibt die Anzahl der Iterationen an, mit denen die angegebene Funktion verschachtelt wird.Folgendes wird verwendet, um PRIMEGAME zu kodieren:
Dies wird als solches gewertet:
Ersetzen wir diesen Ausdruck
G
in der Erklärung durch. Unsere erste Funktion wird:Dies führt eine einzelne Iteration des FRACTRAN-Codes über
_
die Eingabe in die Funktion durch. Es istFind
einIntegral
Mitglied (eines, das eine ganze Zahl ist) des Arrays_*G
, das die_
mit jedem Mitglied von multiplizierte Eingabe istG
.Nest
Wendet diese Transformation einfach die angegebene Anzahl von Malen an.Attache, 42 Bytes
Ich habe Teile der
$langs
Bibliothek implementiert und mich von dieser Herausforderung inspirieren lassen. Daher markiere ich diesen Abschnitt als nicht konkurrierend.Dies fragt einfach die Liste von
FRACTRAN_EXAMPLES
mir ab. Jedes Beispiel ist eineFractranExample
Instanz, die die eingebauteFRACTRAN
Funktion aufruft . Dasprime
Beispiel ist Conways PRIMEGAME.quelle
F # (Mono) , 215 Bytes
Probieren Sie es online!
quelle
PHP, 183 Bytes (189 mit "php" -Tag)
Golf gespielt:
Ungolfed:
Probieren Sie es online!
quelle