lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Experimente online!
fundo
Todos os números inteiros assumem uma das seguintes formas, com o número k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Como 6k - 2 , 6k e 6k + 2 são todos pares e como 6k - 3 é divisível por 3 , todos os números primos, exceto 2 e 3, devem ter a forma 6k - 1 ou 6k + 1 . Como a diferença de um par primo gêmeo é 2 , com exceção de (3, 5) , todos os pares primos gêmeos têm a forma (6k - 1, 6k + 1) .
Seja n da forma 6k ± 1 .
Se n = 6k -1 , então n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Se n = 6k + 1 , então n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Assim, se n faz parte de um par primo gêmeo en ≠ 3 , seu gêmeo será n + n% 6 - 3 .
Como funciona
O Python não possui um teste de primalidade interno. Embora existam maneiras breves de testar um único número de primalidade, fazê-lo para dois números seria demorado. Em vez disso, vamos trabalhar com divisores.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
conta quantos inteiros k no intervalo [2, 4n) dividem (n + n% 6 - 3) n uniformemente, ou seja, contam o número de divisores de (n + n% 6 - 3) n no intervalo [2 , 4n) . Afirmamos que essa contagem é 2 se e somente se n fizer parte de um par primo gêmeo.
Se n = 3 (um primo duplo), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 tem dois divisores ( 3 e 9 ) em [2, 12) .
Se n> 3 é um primo gêmeo, como visto anteriormente, m: = n + n% 6 - 3 é seu gêmeo. Nesse caso, mn possui exatamente quatro divisores: 1, m, n, mn .
Como n> 3 , temos m> 4 , então 4n <mn e exatamente dois divisores ( m e n ) caem no intervalo [2, 4n) .
Se n = 1 , então (n + n% 6 - 3) n = 1 + 1 - 3 = -1 não tem divisores em [2, 4) .
Se n = 2 , então (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 possui um divisor (ele mesmo) em [2, 8) .
Se n = 4 , então (n + n% 6 - 3) n = 4 (4 + 4-3) = 20 possui quatro divisores ( 2 , 4 , 5 e 10 ) em [2, 16) .
Se n> 4 for par, 2 , n / 2 e n todos dividirão n e, portanto, (n + n% 6 - 3) n . Como temos n / 2> 2 desde n> 4 , há pelo menos três divisores em [2, 4n) .
Se n = 9 , então (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 possui três divisores ( 3 , 9 e 21 ) em [2, 36) .
Se n> 9 é um múltiplo de 3 , 3 , n / 3 e n dividem n e, portanto, (n + n% 6 - 3) n . Como temos n / 3> 3 desde n> 9 , há pelo menos três divisores em [2, 4n) .
Finalmente, se n = 6k ± 1> 4 não é um primo duplo, n ou m: = n + n% 6 - 3 deve ser composto e, portanto, admitir um divisor adequado d> 1 .
Uma vez que ambos os n = m + 2 ou m = n + 2 e n, m> 4 , os números inteiros de d , m , e n são distintos divisores de MN . Além disso, m <n + 3 <4n desde n> 1 , então mn tem pelo menos três divisores em [2, 4n) .