Hintergrund
Betrachten Sie die folgende Sequenz ( A051935 in OEIS):
- Beginnen Sie mit dem Begriff .
- Finden Sie die niedrigste ganze Zahl größer als 2, so dass 2 + n eine Primzahl ist.
- Finden Sie die niedrigste ganze Zahl größer als n, so dass 2 + n + n ' Primzahl usw. ist.
Eine formalere Definition:
Die ersten Begriffe der Sequenz sind (bitte bezeichnen Sie diese als Testfälle):
2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...
Aufgabe
Ihre Aufgabe ist es, diese Sequenz auf eine der folgenden Arten zu generieren:
- Geben Sie die Begriffe auf unbestimmte Zeit aus.
- Bei wird ein n ausgegeben ( n- ter Term, 0 oder 1 indiziert).
- Bei wird { a 1 , a 2 , … , a n } ausgegeben (erste n Terme).
Sie können in jeder Programmiersprache antreten und über jede Standardmethode Eingaben und Ausgaben vornehmen. Beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind. Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Antworten:
Brachylog , 13 Bytes
Probieren Sie es online!
Ausgabe ist die Liste der ersten n Terme der Sequenz.
quelle
Python 2 ,
6362 BytesProbieren Sie es online!
quelle
Jelly ,
119 BytesDies ist ein vollständiges Programm, das n als Argument verwendet und die ersten n Terme der Sequenz ausgibt.
Probieren Sie es online!
Wie es funktioniert
quelle
05AB1E v2 , 10 Bytes
Probieren Sie es online!
Dies funktioniert nur in der Nicht-Legacy-Version, dem Elixir-Rewrite. Gibt einen unendlichen Strom von ganzen Zahlen aus. Es gibt einige Fehler mit dem Primetest, die in den letzten Commits behoben wurden, aber noch nicht auf TIO live sind. Es funktioniert jedoch lokal. Hier ist ein GIF der Ausführung auf meinem Computer, das so geändert wurde, dass die ersten Begriffe und nicht der gesamte Stream ausgegeben werden.
Wie es funktioniert
λ
λ
O
Erzeugt die niedrigste Primzahl, die strikt größer als die obige Summe ist.
Abschließend erhalten Sie die absolute Differenz zwischen der oben berechneten Primzahl und der ersten Kopie der zuvor berechneten Summe (der Summe aller vorherigen Iterationen).
Der Stream wird dann implizit auf unbestimmte Zeit nach STDOUT gedruckt.
quelle
Perl 6 , 45 Bytes
Probieren Sie es online!
Gibt eine Lazy List zurück, die die Sequenz ohne Ende generiert.
Erläuterung:
Dies verwendet
...
den Sequenzoperator, der die Sequenz definiert als:quelle
Ruby
-rprime
, 34 BytesProbieren Sie es online!
Ausgänge auf unbestimmte Zeit.
quelle
JavaScript (ES6), 63 Byte
Probieren Sie es online!
quelle
Pyth ,
1211 BytesProbieren Sie es online!
Dank isaacg 1 Byte gespeichert.
Erzeugt die ersten
n
derartigen Zahlen unter Verwendung eines 1-basierten Index..f
findet die erstenk
ganzen Zahlen, die ein bestimmtes Kriterium erfüllen, beginnend mit Null. Hier ist das Kriterium, dass die zuvor berechnete Primzahl;
plus die aktuelle ZahlZ
eine Primzahl (P
) ist. In diesem Fall aktualisieren wir auch die zuletzt berechnete Primzahl anhand des Kurzschlussverhaltens von Logik und Funktion (&
). Leider ist.f
die StandardvariableZ
die die ein Byte im Update kostet.Der Trick, der herausgefunden wurde, bestand darin, die Negation der letzten Primzahl zu speichern und darauf abzüglich des aktuellen Werts zu testen. Dies ist in Pyth kürzer, da die Primalitätsprüfung überlastet ist: Bei positiven Zahlen wird die Primfaktorisierung gefunden, während bei negativen Zahlen bestimmt wird, ob der positive Wert der Zahl eine Primzahl ist.
Dies bedeutet mehr oder weniger:
quelle
_+
mit-
und+
mit-
für -1 Byte.MATL , 21 Bytes
Probieren Sie es online!
Ausgabe sind die ersten n Terme der Sequenz.
Erläuterung:
Erstellt eine Liste von Primzahlen (mit einer anfänglichen 0) und ermittelt am Ende die Rückgabewerte der Unterschiede zwischen aufeinanderfolgenden Primzahlen in der Liste.
quelle
Haskell , 67 Bytes
Probieren Sie es online!
(1#1)2 2
ist eine Funktion, die keine Eingabe annimmt und eine unendliche Liste ausgibt.alte antwort:
Haskell ,
88837876 BytesDer Primalitätstest stammt aus dieser Antwort und wurde von Christian Sievers (-2 Bytes) verbessert .
-5 Bytes dank WW .
Probieren Sie es online!
quelle
^2
. Das ändert das Prädikat von "Test ist Primzahl" in "Test ist Primzahl" oder "4" , was in dieser Anwendung keine Rolle spielt.05AB1E (Legacy) , 12 Byte
Probieren Sie es online!
Erläuterung
Es sind verschiedene 12-Byte-Lösungen möglich.
Diese bestimmte Variable hätte 10 Byte lang sein können, wenn eine verwendbare Variable mit 0 initialisiert worden wäre (anstelle von 1 und 2).
quelle
Python 2 , 119 Bytes
Probieren Sie es online!
Nächste Prime-Funktion f () aus dieser Antwort .
Die Funktion g () nimmt eine nicht negative ganze Zahl i und gibt eine Liste aller Elemente in der Sequenz bis zu diesem Index zurück.
quelle
Python 2 ,
9998 BytesProbieren Sie es online!
1 Byte Danke an Mr. Xcoder .
quelle
k=s-~v
.Haskell ,
101 9997 BytesDie Funktion
l
akzeptiert keine Argumente und gibt eine unendliche Liste zurück. Nicht so kurz wie die direktere Herangehensweise von @ovs (und ich habe offensichtlich einige Teile aus ihrer Antwort gestohlen), aber vielleicht immer noch golffähig?Danke @ H.PWiz für -2 Bytes!
Probieren Sie es online!
quelle
Python 2 ,
82-80BytesProbieren Sie es online!
Dies gibt die n-te Nummer der Sequenz aus (0-basiert). Durch Bewegen des
print
in der Schleife kann dies geändert werden, um die erstenn
Elemente mit demselben bytecount auszugeben: Probieren Sie es online aus!quelle
C (gcc) ,
100 bis99 BytesProbieren Sie es online!
quelle
Japt, 17 Bytes
Gibt den
n
dritten Term mit dem Index 0 aus.Versuch es
quelle