Schreiben Sie ein Programm oder eine Funktion, die die ersten 10000 primindexierten Primzahlen ausgibt / zurückgibt.
Wenn wir die n- te Primzahl nennen p(n)
, lautet diese Liste
3, 5, 11, 17, 31, 41, 59 ... 1366661
da
p(p(1)) = p(2) = 3
p(p(2)) = p(3) = 5
p(p(3)) = p(5) = 11
p(p(4)) = p(7) = 17
...
p(p(10000)) = p(104729) = 1366661
Standardlücken sind verboten, und Standardausgabemethoden sind zulässig. Sie können mit einem vollständigen Programm, einer benannten Funktion oder einer anonymen Funktion antworten.
Antworten:
MATLAB / Octave, 25 Bytes
Einfacher geht es nicht.
quelle
Python, 72 Bytes
Dies endet mit einem "Listenindex außerhalb des Bereichs", nachdem die 10000-Nummern gedruckt wurden, was standardmäßig zulässig ist .
Verwendet die Wilsonsche Theorem-Methode , um eine Liste
l
der Primzahlen bis zur 10000sten Primzahl zu erstellen. Dann werden die Primzahlen mit den Positionen in der Liste gedruckt, die für die Nullindizierung um 1 verschoben wurden, bis nach der 10000. Primzahl-ten Primzahl keine Grenzen mehr vorhanden sind.Zweckmßigerweise die Obergrenze
1366661
kann abgeschätzt werden , wie82e5/6
die ist1366666.6666666667
, ein Zeichen zu speichern.Ich hätte gerne eine Einzelschleifenmethode, bei der Primzahlen gedruckt werden, wenn wir sie hinzufügen, aber sie scheint länger zu sein.
quelle
J, 11 Bytes
Gibt die Primzahlen im Format aus
Erläuterung
quelle
Mathematica,
262523 BytesReine Funktion, die die Liste zurückgibt.
quelle
Listable
so einfachPrime@Prime@Range@1*^4&
tun@
Operator hat eine höhere Priorität als^
beim SchreibenRange@10^4
? Das ist klassisches Mathematica, das Ihr Golfspiel durcheinander bringt. Guter Trick!Haskell, 65 Bytes
Ausgänge:
[3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]
Nicht sehr schnell. So funktioniert es:
p
ist die unendliche Liste der Primzahlen (naiv überprüft man allemod x y
s auf y in[2..x-1]
). Nehmen Sie die ersten10000
Elemente der Liste, die Sie erhalten, wenn0:p!!
(get nth element ofp
) zugeordnet istp
. Ich muss die Liste der Primzahlen, aus denen ich die Elemente nehme, anpassen, indem ich eine Zahl (->0:
) voranstelle , da die Indexfunktion (!!
) auf Null basiert.quelle
PARI / GP, 25 Bytes
quelle
AWK - 129 Bytes
... oookay ... zu lang, um Punkte für Kompaktheit zu gewinnen ... aber vielleicht kann es etwas Ehre für die Geschwindigkeit gewinnen?
Die
x
Datei:Laufen:
Lesbar:
Das Programm berechnet einen Strom von Primzahlen, indem es
L
als "Zahlenband" gefundene Primzahlen verwendet, die herumspringen, umL
die nahegelegenen Zahlen zu kennzeichnen, von denen bereits bekannt ist, dass sie einen Divisor haben. Diese springenden Primzahlen rücken vor, während das "Zahlenband"L
von Anfang an Nummer für Nummer abgeschnitten wird.Wenn der Bandkopf
L[n]
leer ist, ist kein (Haupt-) Teiler bekannt.L[n]
Halten eines Wertes bedeutet, dass dieser Wert eine Primzahl ist und bekanntermaßen dividiertn
.Also haben wir entweder einen Primteiler oder einen neuen Prim gefunden. Dann wird diese Primzahl
L[n+m*p]
auf dem Band, das als leer befunden wurde, auf die nächste vorgerückt .Dies ist wie das Sieb des Eratosthenes "durch eine Kleinsche Flasche gezogen". Sie handeln immer am Bandanfang. Anstatt mehrere Primzahlen durch das Band zu schießen, verwenden Sie die bereits gefundenen Primzahlen als Cursor, die um mehrere Abstände ihres eigenen Werts vom Band wegspringen, bis eine freie Position gefunden wird.
Während die äußere Schleife eine Primzahl oder keine Primzahl pro Schleife erzeugt, werden die gefundenen Primzahlen gezählt und
P
als Schlüssel gespeichert . Der Wert dieses Paars (Schlüssel, Wert) ist für den Programmablauf nicht relevant.Wenn ihr Schlüssel
i
zu sein in geschiehtP
bereits (i in P
), haben wir eine erstklassige der p (p (i)) zu züchten.Laufen:
Beachten Sie, dass dieser Code keine externen vorberechneten Primetabellen verwendet.
Die Zeit, die auf meinem guten alten Thinkpad T60 vergangen ist, ist meines Erachtens verdient, schnell genannt zu werden.
Getestet mit
mawk
undgawk
auf Debian8 / AMD64quelle
CJam, 19
Sie können es online ausprobieren , benötigen jedoch etwas Geduld: p
Für den Datensatz ist die letzte Nummer 1366661.
quelle
Perl, 55 Bytes
Uses @DanaJ ‚s -
Math::Prime::Util
Modul für Perl (mit dem Pragma geladenntheory
). Erhalten Sie es mit:quelle
05AB1E, 7 Bytes (nicht konkurrierend)
Code:
Probieren Sie es online! , beachte, dass ich das
4
in ein geändert habe2
. Wenn Sie viel Zeit haben, können Sie das2
Zurück zu ändern4
, dies wird jedoch viel Zeit in Anspruch nehmen . Ich muss den Algorithmus dafür beschleunigen.Erläuterung:
quelle