Intro:
Sie haben versehentlich den Zeitfluss mit einem Gerät verfälscht, das Sie zum Spaß gemacht haben und das sich als Zeitmaschine herausstellte. Infolgedessen wurdest du in die ferne Zukunft gedrängt. Sie haben festgestellt, dass sich Computer, Rechenleistung und Computer im Allgemeinen enorm weiterentwickelt haben, um genau zu sein , unendlich viel . So schnappen Sie sich einen Computer mit unendlich viel Speicher und Rechenleistung. Sie haben keine Ahnung, wie es unendlichen Speicher und unendliche Rechenleistung haben kann, aber Sie akzeptieren es einfach und kehren in die Gegenwart zurück.
Herausforderung:
Sie haben gehört, dass die Person, die den derzeit größten Prime entdeckt 2^74,207,281 − 1
hat, 100.000 US-Dollar erhalten hat. Sie beschließen, ein Programm zu erstellen, das die nächste Primzahl findet, da Sie das Geld zurückerhalten möchten, das Sie für den Computer ausgegeben haben. Sie erstellen eine, die eine Zahl eingibt und die nächste Primzahl entweder durch Bruteforcing oder eine andere Methode findet.
Erläuterungen:
Sie haben eine hypothetische Maschine mit unbegrenztem Speicher und Rechenleistung. Ihr Programm darf NICHT eingeschränkt sein (zB: C # 's Int's können von -2,147,483,648
bis speichern 2,147,483,647
), und Ihr Programm muss in der Lage sein, eine beliebige Anzahl beliebiger Größen zu speichern und damit zu arbeiten. Sie haben unendlich viele Ressourcen, daher sollte es Sie nicht interessieren, ob Ihnen der Speicher ausgeht, wenn Sie dies zulassen.
Beispiel I / O:
Eingabe: Die aktuell größte entdeckte Primzahl mit 22.338.618 Stellen.
Ausgabe: Genau die nächste Primzahl
Offensichtlich müssen Sie nicht beweisen, dass es funktioniert, da es eine Menge Zeit in Anspruch nehmen würde, um in einer physischen Maschine zu rechnen. Wenn Sie Ihr Programm jedoch auf eine hypothetische Maschine mit unendlicher Rechenleistung / unbegrenztem Arbeitsspeicher verschoben haben, sollte es sofort berechnet werden.
Das Finden der nächsten Primzahl und das Überprüfen, ob eine Zahl eine Primzahl ist, sind zwei völlig verschiedene Dinge
Antworten:
Mathematica, 9 Bytes
quelle
Python 3 , 45 Bytes
Probieren Sie es online!
quelle
k
ist gleich dem Endergebnis,m
enthält(k-1)!^2
. Da (k-1)! = -1 mod k gilt nur, wenn k prim ist, wir haben (k-1)! (K-1)! = 1 mod k, das, wenn es mit k multipliziert wird, k selbst ist. Sie berechnen das Quadrat, um die einzige Ausnahme von (k-1) zu beseitigen! = 0 mod k für zusammengesetztes k, was für k = 4 auftritt. Richtig?RecursionError: maximum recursion depth exceeded in comparison
forf(1000)
RecursionError
.Python 2,
78777674 Bytes-1 Byte dank @KritixiLithos
-1 Byte dank @FlipTack
-2 Byte dank @ElPedro
quelle
n%i<1
ist kürzer alsn%i==0
if
.<1
n+=1
undif
in Tabulatoren ändern und 2 Bytes speichernGelee , 2 Bytes
Probieren Sie es online!
Dies erfordert implizit die Eingabe von z und generiert laut Handbuch die nächstliegende Primzahl, die strikt größer als z ist.
quelle
Oase , 2 Bytes
Laufen Sie mit der
-n
Flagge.Code:
Probieren Sie es online!
quelle
Bash + Coreutils, 52 Bytes
Probieren Sie es online!
In der Dokumentation für bash und factor wird kein maximaler ganzzahliger Wert angegeben, der verarbeitet werden kann (obwohl in der Praxis jede Implementierung einen maximalen ganzzahligen Wert hat). Vermutlich werden in der GNU der Zukunft auf Ihren unendlich großen Maschinen Bash und Factor Ganzzahlen mit unbegrenzter Größe haben.
quelle
Maxima, 10 Bytes
Eine Funktion gibt die kleinste Primzahl zurück, die größer als ihr Argument ist.
quelle
Brachylog , 2 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python mit Sympy, 28 Bytes
sympy.nextprime
ist eine Funktion, die das tut, was sie verspricht. Funktioniert für alle Schwimmer.repl.it
Python,
6659 Bytes-4 Bytes dank Lynn (benutze
-~
)-3 Bytes dank FlipTack (benutze
and
undor
,...==1
um in einen...-1
Zustand versetzt zu werden.)repl.it
Eine rekursive Funktion, die
n
bis zum Auffinden einer Primzahl zählt, indem geprüft wird, ob nur eine Zahl existiert, bisn-1
diese geteilt wird (dh 1). Funktioniert für alle ganzen Zahlen, löst einen Fehler für Floats aus.Funktioniert mit 2.7.8 und 3.5.2, funktioniert nicht mit 3.3.3 (Syntaxfehler aufgrund fehlenden Abstands zwischen
==1
undelse
)quelle
(n+1)%(i+1)
ist-~n%-~i
, denke ich.and
/or
wief=lambda n:sum(-~n%-~i<1for i in range(n))==1and-~n or f(n+1)
?f=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n
Python,
11483 BytesOhne Builtins, wenn es welche gibt.
-30 durch Entfernen von Leerzeichen und -1 durch Ändern
b%i==0
aufb%i<1
quelle
1
Perl 6 , 25 Bytes
Wie es funktioniert
Perl 6 , 32 Bytes
Mit ineffizienten benutzerdefinierten Primalitätstests.
Wie es funktioniert
Die äußere Struktur ist dieselbe wie oben, aber das Prädikat, an das übergeben wird
first
(um zu entscheiden, ob eine bestimmte Zahl eine Primzahl ist), lautet jetzt:quelle
.is-prime
;)Pyke,
87 BytesProbieren Sie es hier aus!
4 Bytes, nicht konkurrierend
(Dolmetscher aktualisiert seit dem Absenden der Challenge)
Probieren Sie es hier aus!
quelle
J, 4 Bytes
Einfach für den nächsten Prime eingebaut.
quelle
05AB1E ,
1613 Bytes (Emigna @ -3 Bytes)Probieren Sie es online!
quelle
[>Dp#
funktionierenPerl, 30 Bytes (29 +1 für
-p
):Verwendung
Geben Sie die Nummer ein, nachdem Sie die Eingabetaste gedrückt haben (Eingabe 12345 im folgenden Beispiel, Ausgabe 12347):
Wie es funktioniert
1
Länge++$_
, wobei$_
anfangs der Eingabewert ist1
s keine Primzahllänge hat ( hier erklärt ).++$_
) erneut ausgewertet.while
Schleife beendet und-p
der Wert von ausgegeben$_
"1"
der Länge 1 zu behandeln, da er niemals für Werte verwendet wird, die niedriger sind als1
gemäß der Spezifikation.quelle
Java 7,
373343334303268 Bytes-75 Bytes danke @Poke
Ungolfed:
Probieren Sie es hier aus.
Einige Beispiele für Ein- / Ausgänge:
quelle
static
für das Feld und die Methode hinzugefügtp
, aber die Methodec
undp
den Parameter entfernt habe.QBIC , 34 Bytes
Basierend auf diesem QBIC-Primalitätstester . Erläuterung:
quelle
JavaScript (ES7), 61 Byte
Verwendung
Ausgabe
quelle
MATL, 3 Bytes
Die Funktion
Yq
gibt die nächste Primzahl des Absolutwerts der Eingabe zurück, wenn die Eingabe negativ ist. Daher greifen wir implizit auf die Eingabe, negieren sie (_
) und suchen die nächste Primzahl mitYq
.Probieren Sie es online!
quelle
Haskell,
424643 Bytesder übliche Code für Brute Force.
Natürlich findet diese die nächste kleinste Primzahl nach
n
. Es gibt keine größte Primzahl.Funktioniert für n > 0 .
edit: Angenommen,
n
ist prime. Danke an @Laikoni 's Rat in den Kommentaren .quelle
head[...]
mit[...]!!0
. Ich denke jedoch, man kann davon ausgehen, dassn
es sich um eine Primzahl handelt, so dass Sie[n..]
stattdessen[n+1..]
das zweite Element verwenden und dann mit übernehmen können[...]!!1
.SimpleTemplate, 132 Bytes
Der Algorithmus ist schrecklich, da ich meinen eigenen Code machen muss, um zu prüfen, ob eine Zahl eine Primzahl ist oder nicht.
Es hat sich als schrecklich erwiesen, funktioniert aber.
Erhält die Zahl als erstes Argument und gibt das Ergebnis aus.
Ungolfed:
Irgendwelche Tipps, wie man das zuletzt entfernt
@if
?quelle
Lua, 876 Bytes
Lua hat im Gegensatz zu einigen anderen Sprachen eine maximale Ganzzahlgröße. Sobald eine Zahl größer als 2 32 wird , funktionieren die Dinge nicht mehr richtig, und Lua versucht, Schätzungen anstelle genauer Werte vorzunehmen.
Als solches musste ich eine neue Methode zum Speichern von Zahlen implementieren, insbesondere habe ich sie als Base10-Zeichenfolgen gespeichert, da Lua keine Größenbeschränkung für Zeichenfolgen außer der Größe des Speichers hat.
Ich bin der Meinung, dass diese Antwort viel mehr dem Geist der Frage entspricht, da sie selbst willkürliche Ganzzahlen sowie einen Primärtest implementieren muss.
Erklärt
Obwohl die oben genannten Metatables verwendet, statt nur reguläre Funktionen wie die eigentliche Antwort, die kleiner ausgearbeitet hat.
quelle
Ruby, 28 + 6 = 34 Bytes
Verwendet die
-rprime
Flagge.Nichtrekursive Version für 31 + 6 = 37 Bytes:
quelle
Python + Primefac ,
3432 BytesNicht ganz so kurz wie using
sympy
(eine andere Antwort verwendet das bereits), aber es ist immer noch ziemlich kurz und viel schneller.Probieren Sie es online aus
Die Eingabe von wird
2**2000
in wenigen Sekunden abgeschlossen.quelle
Japt, 6 Bytes
Führen Sie es online aus.
quelle