Eine Ganzzahl ist genau dann eine Primzahl, wenn sie positiv ist und genau zwei unterschiedliche Teiler hat: 1 und sich selbst. Ein Twin-Prim-Paar besteht aus zwei Elementen: p
und p±2
, die beide Primzahlen sind.
Sie erhalten eine positive Ganzzahl als Eingabe. Ihre Aufgabe ist es, eine Wahrheit / Falschheit zurückzugeben, abhängig davon, ob die angegebene Ganzzahl zu einem Zwillingspaar gehört, und zwar gemäß den Standardregeln für Entscheidungsprobleme (die Werte müssen konsistent sein).
Testfälle
Wahrheit (Twin Primes):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Falsy (nicht Twin Primes):
2, 15, 20, 23, 37, 47, 97, 120, 566
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
code-golf
number
decision-problem
primes
Taylor Scott
quelle
quelle
Antworten:
Brachylog ,
98 BytesProbieren Sie es online!
Erläuterung
quelle
√
Verwendung! +1Gelee ,
109 BytesProbieren Sie es online!
Hintergrund
Mit Ausnahme von (3, 5) haben alle Twin-Prim-Paare die Form (6k - 1, 6k + 1) .
Da (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 und
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , bei einer Eingabe von n> 3 ist es ausreichend zu prüfen, ob n und n + n% 6 - 3 beide Primzahlen sind.
Diese Formel geschieht für die Arbeit n = 3 als auch, wie 3 + 3% 6 - 3 = 3 Primzahl ist und 3 ist ein Doppel prime.
Wie es funktioniert
quelle
Python 3 , 53 Bytes
Probieren Sie es online!
Hintergrund
Alle Ganzzahlen haben eine der folgenden Formen mit der Ganzzahl k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Da 6k - 2 , 6k und 6k + 2 alle gerade sind und 6k - 3 durch 3 teilbar ist , müssen alle Primzahlen außer 2 und 3 die Form 6k - 1 oder 6k + 1 haben . Da die Differenz eines Twin-Prim-Paares mit Ausnahme von (3, 5) 2 beträgt , haben alle Twin-Prim-Paare die Form (6k - 1, 6k + 1) .
Sei n von der Form 6k ± 1 .
Wenn n = 6 k & supmin; ¹ , dann ist n + n% 6-3 = 6 k & supmin ; ¹ + (6 k & supmin; ¹)% 6-3 = 6 k & supmin ; ¹ + 5-3 = 6 k & supmin ; ¹ .
Wenn n = 6k + 1 , dann ist n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
So , wenn n Teil eines Primzahlzwillingspaar und ist n ≠ 3 , es Zwilling wird n + n% 6 - 3 .
Wie es funktioniert
In Python ist kein Primalitätstest integriert. Es gibt zwar kurze Wege, um eine einzelne Zahl auf ihre Ursprünglichkeit zu prüfen, aber dies für zwei Zahlen zu tun, wäre langwierig. Wir werden stattdessen mit Divisoren arbeiten.
zählt, wie viele ganze Zahlen k im Intervall [2, 4n) (n + n% 6 - 3) n gleichmäßig teilen , dh, es zählt die Anzahl der Teiler von (n + n% 6 - 3) n im Intervall [2 4n) . Wir behaupten , dass diese Anzahl ist 2 , wenn und nur wenn n Teil eines Primzahlzwillingspaares ist.
Wenn n = 3 (ein Doppelprimus) ist, hat (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 zwei Teiler ( 3 und 9 ) in [2, 12) .
Wenn n> 3 ein Doppelprimus ist, wie zuvor gesehen, ist m: = n + n% 6 - 3 sein Zwilling. In diesem Fall hat mn genau vier Teiler: 1, m, n, mn .
Da n> 3 ist , haben wir m> 4 , also fallen 4n <mn und genau zwei Teiler ( m und n ) in das Intervall [2, 4n) .
Wenn n = 1 , dann hat (n + n% 6 - 3) n = 1 + 1 - 3 = -1 keine Teiler in [2, 4) .
Wenn n = 2 , dann hat (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 einen Teiler (selbst) in [2, 8) .
Wenn n = 4 , dann hat (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 vier Teiler ( 2 , 4 , 5 und 10 ) in [2, 16) .
Wenn n> 4 gerade ist, teilen 2 , n / 2 und n alle n und daher (n + n% 6 - 3) n . Wir haben n / 2> 2 seit n> 4 , also gibt es mindestens drei Teiler in [2, 4n) .
Wenn n = 9 , dann hat (n + n% 6-3) n = 9 (9 + 3-3) = 81 drei Teiler ( 3 , 9 und 21 ) in [2, 36) .
Wenn n> 9 ein Vielfaches von 3 ist , teilen 3 , n / 3 und n alle n und daher (n + n% 6 - 3) n . Wir haben n / 3> 3 seit n> 9 , also gibt es mindestens drei Teiler in [2, 4n) .
Wenn schließlich n = 6k ± 1> 4 kein Doppelprimus ist, muss entweder n oder m: = n + n% 6 - 3 zusammengesetzt sein und daher einen geeigneten Divisor d> 1 zulassen .
Da entweder n = m + 2 oder m = n + 2 und n, m> 4 , die ganzen Zahlen d , m und n sind unterschiedliche Divisoren mn . Ist m <n + 3 <4n, da n> 1 , so hat mn in [2, 4n) mindestens drei Teiler .
quelle
05AB1E ,
109 Bytes1 Byte dank Datboi gespeichert
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
ÌIÍ‚
statt40SÍ+
für -1 BytePHP, 52 Bytes
ohne GMP 84 Bytes
(mit meiner primären Funktion von Stapelüberlauf )
Als Rohr mit laufen lassen
-nF
. Leere Ausgabe für falsch,1
für wahr.Dennis 'großartige, auf PHP portierte Lösung , 56 Bytes
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .quelle
Mathematica, 33 Bytes
Probieren Sie es online!
quelle
MATL , 11 Bytes
Ausgang ist
0
oder1
.Probieren Sie es online!
Erläuterung
quelle
Pyth ,
14 1211 BytesTest Suite.
3 Bytes mit der Formel in der Antwort von @Dennis gespeichert. 1 Byte dank @Dennis gespeichert.
Pyth , 14 Byte * Anfangslösung
Test Suite.
quelle
Retina ,
4544 BytesGibt 1 zurück, wenn der Eingang ein Doppelprimus ist, andernfalls 0
Probieren Sie es online!
Erläuterung
In Unary konvertieren
Setzen Sie n-2, n und n + 2 in ihre eigenen Zeilen
(Neue Zeile am Ende) Entfernen Sie alle Verbundwerkstoffe, die größer als 1 sind
Überprüfe, ob es zwei aufeinanderfolgende Primzahlen gibt (oder 1,3, weil 3 eine Doppelprimzahl ist)
quelle
Perl 6 , 24 Bytes
Probieren Sie es online!
*
ist das Argument für diese anonyme Funktion.0 & (-2 | 2)
ist die Kreuzung, die aus den Zahlen0
UND entweder-2
ODER besteht2
. Das Hinzufügen*
zu dieser Kreuzung erzeugt die Kreuzung der Zahl*
UND einer der Zahlen* - 2
ODER* + 2
. Der Aufruf deris-prime
Methode an dieser Junction gibt einen Wahrheitswert zurück, wenn*
prime AND* - 2
OR* + 2
ist. Schließlich wird die?
wahrheitsgemäße Verknüpfung auf einen Booleschen Wert reduziert, wodurch die Bedingung für konsistente Rückgabewerte erfüllt wird.quelle
JavaScript,
91 Bytes, 81 Bytes dank Jared SmithErläuterung
p
gibt an, ob die angegebene Zahln
eine Primzahl ist oder nicht, undt
testet die angegebene Zahln
undn±2
.Beispiel
Code-Snippet anzeigen
quelle
var
, die Klammern um dien
in der Funktionsdefinition usw.n
neben dem Wert vont(n)
für mehr Klarheit anzuzeigen (z. B.7: true
)J, 23 Bytes
Probieren Sie es online!
Wie?
quelle
3>0#.@p:0 2 _2&+
05AB1E , 8 Bytes
Port of Dennis 'Jelly Antwort
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
Ruby, 38 + 6 = 44 Bytes
Benötigt Optionen
-rprime
.Probieren Sie es online!
quelle
&
statt&&
JavaScript (ES6), 54 Byte
Code-Snippet anzeigen
quelle
Excel VBA,
102100 BytesKeine eingebauten Primalitätsfunktionen für VBA :(
Code
Anonyme VBE- Direktfensterfunktion , die Eingaben von der Zelle übernimmt
[A1]
und entweder1
(wahr) oder0
(falsch) an das VBE- Direktfenster ausgibtHilfsfunktion
Alternativ 122 Bytes
Code
Auf rekursiven Primalitätsprüfungsfunktionen basierende Lösung
Hilfsfunktion
quelle
PHP, 85 Bytes 24 Bytes dank Mayube
quelle
a
b
function
Schlüsselwort nicht mehr?Python 2 , 75 Bytes
Probieren Sie es online!
quelle
Japt , 13 Bytes
Gibt zurück
true
und gibtfalse
an, ob die Zahl Teil eines Primzahl-Zwillingspaares ist.Probieren Sie es online!
Erläuterung
Implizit:
U
= Ganzzahl eingebenÜberprüfen Sie, ob die Eingabe prime (
j
), AND (©
) ist ...[U+2, U-2]
Überprüfen Sie mithilfe des Arrays , ob Elemented
gemäß der Primalitätsfunktion (j
) true ( ) sind .Implizite Ausgabe des booleschen Ergebnisses von
is input prime AND is any ±2 neighbor prime
.quelle
[U+2U-2]
könnte viel kürzer sein, aber ich kann nicht herausfinden, wie ...