Kürzlich habe ich den Roman "Die Einsamkeit der Primzahlen" gelesen, in dem die Hauptfiguren in gewisser Weise mit Doppelprimzahlen verglichen werden (" immer zusammen, aber nie berührend ").
Eine Doppelprimzahl ist eine Primzahl, die entweder 2 weniger oder 2 mehr als eine andere Primzahl ist - zum Beispiel das Doppelprimpaar (41, 43). Mit anderen Worten, eine Doppelprimzahl ist eine Primzahl mit einer Primzahllücke von zwei. Manchmal wird der Begriff Doppelprimus für ein Paar Doppelprimus verwendet; Ein alternativer Name hierfür ist Prime Twin oder Prime Pair. Wikipedia
Obwohl ich den deprimierenden Roman nicht besonders mochte und seitdem ich in letzter Zeit in PPCG verfallen bin, stellte sich mir eine Frage ...
Aufgabe:
Bei einer positiven Ganzzahl N> 4 finden Sie die einsamen Primzahlen (AKA- isolierte Primzahlen ) zwischen den engsten Paaren von Doppelprimen .
Bitte beachten Sie, dass in diesem Fall mit dem Begriff einsame Primzahlen alle Primzahlen gemeint sind, die keine Doppelprimzahlen sind, und zwischen Paaren von Doppelprimzahlen . Deshalb ist N> 4, weil die ersten beiden Primzahlenpaare (3, 5) und (5, 7) sind.
Beispiel:
- N = 90.
- Finden Sie die ersten beiden Paare der Doppelprimzahlen <N und> N. Sie sind: (71, 73) und (101, 103).
- Finde die einsamen Primzahlen im Bereich> 73 und <101.
- Sie sind: 79, 83, 89, 97.
Spezialfälle:
- Wenn N zwischen zwei Doppelprimzahlen liegt, finden Sie die nächsten Paare der Doppelprimzahlen> N + 1 und <N-1. Beispiel: N = 72, finde die engsten Paare der Doppelprimzahlen> 73 und <71 und schließe sie dann aus der Liste 71 und 73 aus, weil sie keine einsamen Primzahlen sind . Für N = 72 ist das erwartete Ergebnis: 67,
71,73, 79, 83, 89, 97 - Wenn N zu einem Paar von Zwillingsprimen gehört, zum Beispiel N = 73, sind die nächsten Paare von Zwillingsprimen (71, 73) und (101, 103). Wenn N = 71 ist, sind die engsten Paare der Doppelprimzahlen (59, 61) und (71, 73).
Testfälle:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Regeln:
- Schreiben Sie ein vollständiges Programm oder eine Funktion, die die Nummer N von der Standardeingabe übernimmt.
- Die Liste der einsamen Primzahlen in einem lesbaren Format als CSV, Liste, Array usw. ausgeben.
- Kürzester Code gewinnt.
- Bitte fügen Sie (wenn möglich) eine testbare Online-Geige bei.
Antworten:
Eigentlich 47 Bytes
Diese Lösung befasst sich mit dem Fall
n
zwischen zwei Doppelprimzahlen, indem überprüft wird, ob die untere Grenze die größere eines Paares von Doppelprimzahlen ist (wobei die Doppelprimzahl links von uns nicht mehr unsere untere Grenze ist) und ob die obere Grenze ist die kleinere von zwei Doppelprimzahlen (wobei die Doppelprimzahl rechts von uns nicht mehr unsere obere Schranke ist). Um zu verhindern, dass die Doppelprimzahlen in unser Sortiment aufgenommen werden, sobald wir die Unter- und Obergrenze haben, müssen wir Primzahlen entfernen, beip
denenp-2
ORp+2
Primzahlen sind, daher das logische OR und die Negation im Code.Dies ist ein wenig lang und kann wahrscheinlich weiter golfen werden. Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
23
wenn eine Eingabe24
erfolgt. Die Twin-Prim-Schranken sollten17 / 19
und sein29 / 31
und23
sind isolierte Primzahlen im Bereich19 .. 29
.p
besagt, dass25
Prime ist, noch nicht behoben, oder Dennis hat seit der Fehlerbehebung nicht mehr gezogen. Lass mich nachsehen.PowerShell v2 +,
237149147231216181174169166 ByteÜbernimmt die Eingabe
$n
. Definiert eine neue Funktionf
als Regex-Prim-Funktion (hier wird ein Boolescher Wert zurückgegeben, wenn die Eingabe eine Primzahl ist oder nicht).Der nächste Teil
$i
ist gleich und$n
geht dann in einer Schleife nach oben, bis wir die untere Hälfte unserer oberen Grenze für das Twin-Prim-Paar finden. ZB für die Eingabe endet90
dies bei$i=101
.Dann schleifen wir von der oberen Grenze nach unten. Ich weiß, es sieht aus wie eine Endlosschleife, aber es wird irgendwann enden.
Wenn die aktuelle Zahl eine Primzahl (ist
f(--$i)
), aber seine+/- 2
nicht prim, fügen wir$i
an die Pipeline. Wenn+/- 2
es sich jedoch um eine Primzahl handelt, prüfen wir, ob wir niedriger sind als$n-1
(dh um die Situation zu berücksichtigen, in der es sich um ein Twin-Prim-Paar handelt)exit
. Nach Abschluss des Programms wird die Pipeline implizit auf dem Bildschirm ausgegebenWrite-Output
.Hinweis: Aufgrund der Schleifenstruktur werden die Primzahlen in absteigender Reihenfolge gedruckt. OP hat klargestellt, dass das in Ordnung ist.
Beispiele
Die Ausgabe ist hier durch Leerzeichen getrennt, da dies die Standard-Stringifizierungsmethode für ein Array ist.
quelle
Haskell, 105 Bytes
Probieren Sie es online
quelle
JavaScript,
186183168158 Bytesquelle
PHP, 207 Bytes
4754 Bytes für dieis_prime
Funktion, die PHP nicht hat. Ohne das hätte ich Mathematica geschlagen. :-Drenn mit
-r
. druckt ein nachstehendes Komma.Nervenzusammenbruch
Hinweis :
Die
is_prime
Funktion gibt tatsächlichtrue
für zurück$n<2
; aber immerhin gibt es keine warnung. Legen Sie$n=
vor$n>1
zu beheben.quelle
Mathematica,
169157 Bytesquelle
Schläger 228 Bytes
Nachteil dieser Version ist, dass sie alle Primzahlen bis N findet und nicht nur die um N.
Ungolfed-Version:
Testen:
Ausgabe:
quelle
Schläger 245 Bytes
Ungolfed-Version:
Ausgabe:
quelle
Python 2.7: 160 Bytes
Vorschläge sind willkommen :)
quelle