lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
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.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
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 .