lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Pruébalo en línea!
Fondo
Todos los enteros toman una de las siguientes formas, con el entero k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Como 6k - 2 , 6k y 6k + 2 son todos pares, y dado que 6k - 3 es divisible por 3 , todos los primos, excepto 2 y 3, deben tener la forma 6k - 1 o 6k + 1 . Dado que la diferencia de un par primo gemelo es 2 , con la excepción de (3, 5) , todos los pares primos gemelos son de la forma (6k - 1, 6k + 1) .
Sea n de la forma 6k ± 1 .
Si n = 6k -1 , entonces n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Si n = 6k + 1 , entonces n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Por lo tanto, si n es parte de un par primo gemelo y n ≠ 3 , su gemelo será n + n% 6 - 3 .
Cómo funciona
Python no tiene una prueba de primalidad incorporada. Si bien hay formas breves de probar un número único para primalidad, hacerlo para dos números sería largo. Vamos a trabajar con divisores en su lugar.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
cuenta cuántos enteros k en el intervalo [2, 4n) se dividen (n + n% 6 - 3) n de manera uniforme, es decir, cuenta el número de divisores de (n + n% 6 - 3) n en el intervalo [2 , 4n) . Afirmamos que este conteo es 2 si y solo si n es parte de un par primo gemelo.
Si n = 3 (un primo gemelo), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 tiene dos divisores ( 3 y 9 ) en [2, 12) .
Si n> 3 es un primo gemelo, como se vio antes, m: = n + n% 6 - 3 es su gemelo. En este caso, mn tiene exactamente cuatro divisores: 1, m, n, mn .
Desde n> 3 , tenemos m> 4 , por lo que 4n <mn y exactamente dos divisores ( m y n de la caída) en el intervalo [2, 4 N) .
Si n = 1 , entonces (n + n% 6 - 3) n = 1 + 1 - 3 = -1 no tiene divisores en [2, 4) .
Si n = 2 , entonces (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 tiene un divisor (en sí) en [2, 8) .
Si n = 4 , entonces (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 tiene cuatro divisores ( 2 , 4 , 5 y 10 ) en [2, 16) .
Si n> 4 es par, 2 , n / 2 , y n todo brecha n y, por lo tanto, (n + n% 6 - 3) n . Tenemos n / 2> 2 desde n> 4 , por lo que hay al menos tres divisores en [2, 4n) .
Si n = 9 , entonces (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 tiene tres divisores ( 3 , 9 y 21 ) en [2, 36) .
Si n> 9 es un múltiplo de 3 , a continuación, 3 , n / 3 , y n todo brecha n y, por lo tanto, (n + n% 6 - 3) n . Tenemos n / 3> 3 desde n> 9 , por lo que hay al menos tres divisores en [2, 4n) .
Por último, si n = 6k ± 1> 4 no es un número primo gemelo, o bien n o m: = n + n% 6 - 3 debe ser de material compuesto y, por tanto, admiten un divisor adecuado d> 1 .
Desde ya sea n = m + 2 o m = n + 2 y n, m> 4 , los enteros d , m , y n son distintos divisores de mn . Además, m <n + 3 <4n ya que n> 1 , entonces mn tiene al menos tres divisores en [2, 4n) .