Herausforderung
Dies ist ganz einfach: Geben Sie bei einer positiven Ganzzahl von bis zu 1.000.000 die nächste Primzahl zurück.
Wenn die Zahl selbst eine Primzahl ist, sollten Sie diese Zahl zurückgeben. Wenn es zwei Primzahlen gibt, die der angegebenen Zahl gleich sind, geben Sie die niedrigere der beiden zurück.
Die Eingabe erfolgt in Form einer einzelnen Ganzzahl, und die Ausgabe sollte auch in Form einer Ganzzahl erfolgen.
Es ist mir egal, wie Sie die Eingabe (Funktion, STDIN usw.) einlesen oder die Ausgabe (Funktion, STDOUT usw.) anzeigen, solange dies funktioniert.
Dies ist Codegolf, daher gelten die Standardregeln - das Programm mit den wenigsten Bytes gewinnt!
Testfälle
Input => Output
------ -------
80 => 79
100 => 101
5 => 5
9 => 7
532 => 523
1 => 2
Antworten:
Gaia , 3 Bytes
Probieren Sie es online!
Ziemlich langsam für große Eingaben, funktioniert aber bei genügend Arbeitsspeicher / Zeit.
Ich bin mir nicht sicher, warum
D⌡
implizit noch einmal drängtz
, aber das macht dies zu einer bemerkenswert kurzen Antwort!quelle
JavaScript (ES6), 53 Byte
Probieren Sie es online!
Kommentiert
quelle
05AB1E , 5 Bytes
Probieren Sie es online! oder als Testsuite
Ineffizient für große Zahlen
quelle
Ån
ist " Im Falle eines Unentschieden wird die höhere Primzahl gedrückt ".Oktave , 40 Bytes
Probieren Sie es online!
Dies beruht auf der Tatsache, dass zwischen
n
und immer eine Primzahl steht2*n
( Bertrand-Chebyshev-Theorem ).Wie es funktioniert
quelle
Japt , 5 Bytes
Probieren Sie es aus oder führen Sie alle Testfälle aus
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 31 Byte
Probieren Sie es online!
1000003 ist die 78499. Primzahl.
Nearest
priorisiert Werte, die früher in der Liste erscheinen (die niedriger sind).quelle
Nearest[Prime@Range@#,#,1]&
für 27Brachylog ,
75 BytesProbieren Sie es online!
2 Bytes gespart dank @DLosc.
Erläuterung
quelle
≜
Ich nehme an, Sie haben von Anfang an darüber nachgedacht, während ich über das Pairing und Subtrahieren nachgedacht habe und erst später festgestellt habe, dass ich≜
dafür sorgen muss , dass es funktioniert. :)Pyth, 10 Bytes
Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
quelle
Gelee ,
97 BytesProbieren Sie es online!
Langsam für größere Eingaben, funktioniert aber für den angeforderten Bereich. Vielen Dank an @EriktheOutgolfer für das Speichern von 2 Bytes!
quelle
_A¥
mitạ
(absolute Differenz). Oh, und dasḤ
kann wirklich sein‘
.‘
funktioniert die Verwendung nicht immer? Dies bedeutet, dass nur Primzahlen bis zu n + 1 gefunden werden, während die nächstliegende n + 2 sein kann.Python 2 , 71 Bytes
Probieren Sie es online!
p
p%k
abs(k-n)
k
k-n
abs
n
k
Der Ausdruck
k+n-p%k*2*n
ist so konzipiert, dassk-n
er Primzahlen (wop%k=1
) angibt , andernfalls ist ein "schlechter" Wert vonk+n
immer größer als der absolute Wert und hat keinen Einfluss auf das Minimum, sodass Nicht-Primzahlen übergangen werden.quelle
C (GCC) ,
87767472 ByteOptimierung von innat3s C # (Visual C # Interactive Compiler), 100 Bytes
Probieren Sie es online!
quelle
r!=2
Entsprichtr-2
,n%++i?0:r++
kann höchstwahrscheinlich seinn%++i||r++
.Ordentlich , 43 Bytes
Probieren Sie es online!
Erläuterung
Dies ist ein Lambda mit Parameter
x
. Dies funktioniert durch Erstellen der folgenden Sequenz:Dies verbindet die beiden Sequenzen
]x, -1, -∞]
(links geschlossen, rechts offen) und[x, ∞]
(beide offen).Denn
x = 80
das sieht so aus:Dann verwenden wir
f↦s
, um alle Elemente aus ders
Befriedigung auszuwählenf
. In diesem Fall werden alle zusammengesetzten Zahlen herausgefiltert, wobei nur die Primzahlen übrig bleiben. Für das gleichex
wird dies:Dann verwenden wir
(...)@0
, um das erste Mitglied dieser Sequenz auszuwählen. Da die niedrigere der beiden ausgewählt werden muss, wird die Sequenz, die mit beginnt,x - 1
zuerst eingespleißt.Hinweis: Nur eines von
x
undx - 1
kann eine Primzahl sein, daher ist es in Ordnung, dass die gespleißte Sequenz mit beginntx - 1
. Obwohl die Sequenz auf beiden Seiten offen sein könnte ([x,-1,-∞]
), würde dies unnötigerweisex
zweimal in die Sequenz einschließen . Aus Gründen der "Effizienz" habe ich mich für die links geschlossene Version entschieden (auch, weil ich Tidy gerne zur Schau stelle).quelle
Faktor 91 Bytes
Probieren Sie es online!
quelle
APL (Dyalog ausgefahren) ,
2015 Bytes SBCSTacit-Präfix-Funktion, inspiriert von Galen Ivanovs J-Antwort .
Probieren Sie es online!
⍳
Ermittelt einen durch das Argument.¯2⍭
n-te Primzahlen davon⊢(
…)
Wende die folgende implizite Funktion an, wobei das ursprüngliche Argument das linke Argument ist:⊢
die Primzahlen⊇
indiziert von:⍋
die aufsteigende Grad (Indizes , die aufsteigend sortieren würde)⍤
von|
der Größe (Absolutwert)⍤
von-
den Unterschieden⊃
wähle den ersten (dh den mit dem kleinsten Unterschied)quelle
Perl 6 , 35 Bytes
Probieren Sie es online!
Dies verwendet die Veitcel-Technik zum Erzeugen der Liste
0, -1, 2, -3
, vereinfacht diese jedoch erheblich,($*=-1)*$++
indem die in P6 verfügbaren anonymen Statusvariablen verwendet werden (ich hatte sie ursprünglich-1 ** $++ * $++
, aber beim Golfen verliert das Negative den Vorrang). Es gibt einen eingebauten Prime Checker, aber leideruntil
verhindert der den automatisch zurückgegebenen Wert, so dass es ein zusätzliches Herumhängen gibt$_
.quelle
C,
122121104 BytesVerwenden Sie die aufrufende Funktion
c()
und übergeben Sie die Nummer als Argument. Es sollte die nächste Primzahl zurückgeben.Dank Verkörperung der Ignoranz für
1 Byte konnteeine große Verbesserung erzielt werden.Probieren Sie es online!
quelle
c()
erhält zwei Parameter ... Auch können Sie wahrscheinlich die Verkürzungwhile(1)
auffor(;;)
(nicht getestet, da ich nicht bekommen , wie Sie Ihren Code auszuführenc()
nur die Übergabe des ersten Parameters aufrufen . Und Sie haben Recht,for(;;)
spart mir ein Byte, nur noch 117 übrig, um den ersten Platz zu erreichen :)#define r return p(a,i){i=1;while(++i<a)if(a%i<1)r 0;r a>1;}c(a,b){b=a;for(;;b++){if(p(--a))r a;if(p(b))r b;}}
. Hier ist ein TIO-Link: tio.run/…Wolfram Language (Mathematica) , 52 Byte
Probieren Sie es online!
quelle
APL (NARS), 38 Zeichen, 76 Byte
0π ist der Test für Primzahl, ¯1π die vorherige Primzahl, 1π ist die nächste Primzahl; Prüfung:
quelle
J ,
19-15BytesProbieren Sie es online!
quelle
Perl 5 , 59 Bytes
Probieren Sie es online!
/^.?$|^(..+?)\1+$/
ist knifflig, um Prime zu überprüfen(-1)**$a*($a++)
Folge 0, -1, 2, -3 erzeugen ...quelle
MathGolf , 10 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Python 2 (Cython) , 96 Bytes
Probieren Sie es online!
quelle
r=range;...
C # (Visual C # Interactive Compiler) ,
104100 ByteProbieren Sie es online!
Erläuterung:
quelle
Java 8,
8887 BytesPort of @NaturalNumberGuys (erste) C-Antwort , also stelle sicher, dass du ihn positiv bewertest !!
-1 Byte danke an @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
Java (JDK) , 103 Byte
Probieren Sie es online!
quelle
;
. :) Soll ich meine Antwort löschen? .. Fühlen Sie sich frei, die Erklärung zu kopieren.Haskell ,
7974 Bytes (danke an Laikoni)72 Bytes als Annonymus-Funktion (das anfängliche "f =" könnte in diesem Fall entfernt werden).
Probieren Sie es online!
ursprünglicher Code:
Probieren Sie es online!
Erläuterung:
quelle
,
anstelle von verwenden&&
.(last$ ...)
kann seinlast(...)
, und der zweite Schutz1>0
kann für eine Bindung verwendet werden, um Klammern zu speichern, zy<-x+n
.f=
nicht gezählt werden muss. Auch die Klammer, die einschließt,(-1+n)
kann fallengelassen werden.VDM-SL , 161 Bytes
Ein vollständiges auszuführendes Programm könnte so aussehen - es ist erwähnenswert, dass die Grenzen der verwendeten Primzahlenmenge wahrscheinlich geändert werden sollten, wenn Sie dies tatsächlich ausführen möchten, da es lange dauern wird, bis 1 Million ausgeführt werden:
Erläuterung:
quelle
MATL , 6 Bytes
Probieren Sie es online!
Listen Sie die ersten
n
Primzahlen auf und finden Sie diejenige, die am nächsten istn
.quelle
C # (Visual C # Interactive Compiler) , 112 Byte
Probieren Sie es online!
Der linke Bereich wird bei der Übermittlung um 20, bei TIO jedoch um 10 verschoben, sodass TIO für Testfälle beendet wird.
quelle