Eine Primzahllücke ist der Unterschied zwischen zwei aufeinanderfolgenden Primzahlen. Genauer gesagt, wenn p und q Primzahlen mit p < q sind und p + 1, p + 2, ..., q - 1 keine Primzahlen sind, definieren die Primzahlen p und q eine Lücke von n = q - p . Der Spalt wird gesagt werden gestartet durch p und hat Länge n .
Es ist bekannt, dass beliebig große Primlücken bestehen. Das heißt, wenn n gegeben ist, existiert eine Primzahllücke der Länge n oder größer. Es kann jedoch sein, dass eine Primlücke der Länge n nicht existiert (eine größere Lücke jedoch).
Die Herausforderung
Bei einer positiven Ganzzahl n
wird die erste Primzahl ausgegeben, die eine Lücke von mindestens Länge beginnt n
.
Als Beispiel für die Eingabe sollte 4
die Ausgabe sein 7
, da 7 und 11 die ersten aufeinanderfolgenden Primzahlen sind, die sich um mindestens 4 unterscheiden (die vorherigen Lücken sind 1, 2 bis 3; 2, 3 bis 5; und 2, 5) bis 7). Für die Eingabe sollte 3
die Antwort auch lauten 7
(es gibt keine Lücken der Länge 3).
Zusätzliche Regeln
Der Algorithmus sollte theoretisch für beliebig hohe Werte arbeiten
n
. In der Praxis ist es akzeptabel, wenn das Programm durch Zeit, Speicher oder Datentypgröße begrenzt ist.Eingabe und Ausgabe können mit allen angemessenen Mitteln erfolgen .
Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
Kürzester Code in Bytes gewinnt.
Testfälle
Input -> Output
1 2
2 3
3 7
4 7
6 23
10 113
16 523
17 523
18 523
30 1327
50 19609
100 370261
200 20831323
quelle
Antworten:
Gaia , 6 Bytes
Dies ist äußerst ineffizient (die
16
Berechnung des Testfalls auf meinem Computer dauerte über eine Stunde).Probieren Sie es online!
Erläuterung
Die Sequenz scheint die Eigenschaft zu haben, dass a (n) <= 2 ^ n ist .
quelle
Jelly ,
10, 9, 8,10 BytesProbieren Sie es online!
Zwei Bytes gespart dank @Dennis! (und dann wegen Edge-Cases wieder hinzugefügt)
Erläuterung:
quelle
#
wird von der Eingabe hier hochgezählt) Es scheint vernünftig, dies anzunehmen, aber ich für meinen Teil habe keine Ahnung, ob es eine gültige Annahme ist. EDIT: FYI zu beheben (falls erforderlich) Präfix mit2ð
Mathematica, 30 Bytes
Probieren Sie es online!
Mathematica, 35 Bytes
Probieren Sie es online!
Mathematica, 77 Bytes
quelle
p
undq
sind Primzahlen ... Der erste Code scheint jedoch ungültig zu sein, da er nur bis 65535 reicht, wenn Sie das Argument nicht explizit angebenMaxIterations
.(For[t=2,NextPrime@t-t<#,t++];t)&
Haskell ,
106 102 93 77 7372 BytesDies erzeugt zuerst eine unendliche Liste von Primzahlen und sucht dann nach den Lücken der Primzahlen. Die Hauptliste wurde von hier genommen . Es kann wahrscheinlich gekürzt werden, aber ich habe noch nicht herausgefunden, wie :)
Danke an @BruceForte für -4 Bytes und @Zgrab für -1 Bytes!
Probieren Sie es online!
quelle
zip=<<tail$[...]
Speichert ein Byte.n
nach einer begrenzten Zeitspanne aufhört :) (Haskell ist keine prozedurale, sondern eine funktionale Sprache mit fauler Bewertung.)Pyth - 14 Bytes
Es filtert von [1, inf), filtert nach Primalität (
P_
) und dass die nächste Primzahl, die von (n, inf) gefiltert wird, ein anderes> = als die Eingabe hat.Test Suite .
quelle
PowerShell ,
979691 ByteProbieren Sie es online!
Übernimmt die Eingabe
$n
, setzt$a
und$b
gleich und2
tritt dann in einefor
Endlosschleife ein. Drinnen machen wir eine Schleife,$b
bis wir zur nächsten Primzahl kommen . Dann überprüfen wir , ob$b-$a
(dh die Lücke) ist-g
reaterthanore
qual zu$n
. Wenn ja, geben wir$a
und ausexit
. Ansonsten setzen wir$a
sein$b
und Erhöhung$b
unserer nächsten Suche und starten.Warnung: Dies ist bei großen Eingaben langsam . Tatsächlich kann es die
50
oder höhere Tests nicht innerhalb des 60er-Zeitlimits für TIO abschließen . Naja.quelle
Schale ,
131110 BytesProbieren Sie es online!
quelle
Mathematica, 39 Bytes
33-Byte-Version (nicht gültig, da nur bis zur 65535. Primzahl)
quelle
Python 2 ,
9688 Bytes- 8 Bytes Danke an @Maltysen
Probieren Sie es online!
quelle
Perl 6 , 63 Bytes
Probieren Sie es online!
quelle
Mathematica, 37 Bytes
Function
mit erstem argumentg
. Beginnend mit2
, wendet die Funktionp=NextPrime
so lange wiederholt an, wie sichp@#-#<g&
ergibtTrue
(die Lücke zwischen der aktuellen Primzahl und der nächsten Primzahl ist geringer alsg
).quelle
R + gmp, 55 Bytes
Verwendet die nextprime-Funktion aus der gmp-Bibliothek
quelle
cat(s)
am Ende hinzufügen . Implizites Drucken funktioniert nicht in vollständigen Programmen.Ruby , 61 Bytes
Probieren Sie es online!
quelle
C =
141109 Bytes; C ++, D = 141 Bytes; C #, Java = 143 BytesWARNUNG : NIEDRIGER LEISTUNGSALGORITHMUS
Dieser Code konnte die Hauptlücke nicht
g(200)
innerhalb von 10 Minuten berechnen . Fürg(100)
, es dauerte 10 Sekunden (C ++ Version)C ++ und D Version:
C # und Java Version:
C-Version, -32 Bytes dank ceilingcat:
Unterschiede zwischen der C # / Java- und der C / C ++ / D-Version:
!p(n)
<==>p(n)==0
quelle
return 0; return 1
und entfernen Sie die!
Vorherp(++n)
d%i==0
und!(d%i)
kann seind%i<0
. Auch kann D's Template - System unter Verwendung der Lösung in D:T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;
. (Das Entfernen von geschweiften Klammern nach demfor
unddo
könnte auch für C ++ gelten)int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}
<- das sollte für die C ++D,
127125122 BytesWARNUNG: NIEDRIGER LEISTUNGSALGORITHMUS !!
Probieren Sie es online!
Wie?
HatsuPointerKun nochmal, aber ich mache die D-spezifische Zauberei.
T p(T)(T d)
und ist kürzer als C ++r=d%i++<1||r
, D-spezifische Spielereien, funktionieren möglicherweise in C / C ++, aber ich weiß es nicht.p(++n)
Wie oben, nicht sicher, ob es in C / C ++ funktioniertwhile(p(++n)){}
Hier sieht man, warum D schlecht im Golfen ist, man kann es nicht;
als leere Aussage verwenden.quelle
Perl 6 ,
4137 BytesProbieren Sie es online!
Erläuterung
quelle
QBIC , 28 Bytes
Erläuterung
quelle
05AB1E , 9 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (Test Suite enthält nicht die letzten beiden Testfälle, da TIO für diese eine Zeitüberschreitung aufweist.)
Da die andere Frage als Betrug geschlossen ist , veröffentliche ich meine Antwort auch hier.
Erläuterung:
quelle
Java 8,
9992 BytesProbieren Sie es online aus. (Größter Testfall ist ausgeschlossen, da bei TIO eine Zeitüberschreitung auftritt.)
Erläuterung:
quelle
Ordentlich , 33 Bytes
Probieren Sie es online!
Oder 28 Zeichen / 34 Byte:
{x:({v:⊟v≤-x}↦primes+2)@0@0}
Ich erkläre dies mit einem äquivalenten ASCII-Äquivalent:
quelle
APL (NARS), 36 Zeichen, 72 Byte
1π ist die Funktion "nächste Primzahl"; Prüfung:
quelle