Un número entero es primo si y solo si es positivo y tiene exactamente 2 divisores distintos: 1 y él mismo. Un par primo gemelo está hecho de dos elementos: p
y p±2
, ambos son primos.
Se le dará un entero positivo como entrada. Su tarea es devolver un verdadero / falso dependiendo de si el entero dado pertenece a un par gemelo, siguiendo las reglas estándar de decisión-problema (los valores deben ser consistentes).
Casos de prueba
Verdad (Primes gemelos):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Falsy (no Twin Primes):
2, 15, 20, 23, 37, 47, 97, 120, 566
Este es el código de golf , por lo que gana el código más corto en bytes.
code-golf
number
decision-problem
primes
Taylor Scott
fuente
fuente
Respuestas:
Brachylog ,
98 bytesPruébalo en línea!
Explicación
fuente
√
Uso inteligente ! +1Jalea ,
109 bytesPruébalo en línea!
Fondo
Con la excepción de (3, 5) , todos los pares primos gemelos tienen la forma (6k - 1, 6k + 1) .
Dado que (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 y
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , dada una entrada n> 3 , es suficiente verificar si n y n + n% 6 - 3 son primos.
Esta fórmula pasa a trabajo para n = 3 , así, como 3 + 3% 6 - 3 = 3 es primo y 3 es un primo gemelo.
Cómo funciona
fuente
Python 3 , 53 bytes
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.
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) .
fuente
05AB1E ,
109 bytesGuardado 1 byte gracias a Datboi
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
ÌIÍ‚
lugar de40SÍ+
por -1 bytePHP, 52 bytes
sin GMP, 84 bytes
(usando mi función principal del desbordamiento de pila )
Ejecutar como tubería con
-nF
. Salida vacía para falsedad,1
para verdad.La gran solución de Dennis portada a PHP, 56 bytes
Ejecutar como tubería
-nR
o probarlo en línea .fuente
Mathematica, 33 bytes
Pruébalo en línea!
fuente
MATL , 11 bytes
La salida es
0
o1
.Pruébalo en línea!
Explicación
fuente
Pyth ,
14 1211 bytesBanco de pruebas.
Se guardaron 3 bytes usando la fórmula en la respuesta de @Dennis. Guardado 1 byte gracias a @Dennis.
Pyth , 14 bytes * Solución inicial
Banco de pruebas.
fuente
Retina ,
4544 bytesDevuelve 1 si la entrada es un primo doble, de lo contrario 0
Pruébalo en línea!
Explicación
Convertir a unario
Ponga n-2, n y n + 2 en sus propias líneas
(Nueva línea final) Eliminar todos los compuestos mayores que 1
Compruebe si hay dos primos consecutivos (o 1,3 porque 3 es un primo doble)
fuente
Perl 6 , 24 bytes
Pruébalo en línea!
*
es el argumento de esta función anónima.0 & (-2 | 2)
es la unión que consiste en los números0
Y o-2
OR2
. Sumar*
a esta unión produce la unión del número*
Y cualquiera de los números* - 2
OR* + 2
. Llamar alis-prime
método en esta unión devuelve un valor verdadero si*
es primo Y bien* - 2
O* + 2
son primos. Finalmente,?
colapsa la unión verdadera a un valor booleano, satisfaciendo la condición de valores de retorno consistentes.fuente
JavaScript,
91 bytes, 81 bytes gracias a Jared SmithExplicación
p
indica si el número dadon
es primo o no, yt
prueba el número dadon
yn±2
.Ejemplo
Mostrar fragmento de código
fuente
var
paréntesisn
en la definición de la función, etc.n
al lado del valor det(n)
para mayor claridad (por ejemplo7: true
)J, 23 bytes
Pruébalo en línea!
¿cómo?
fuente
3>0#.@p:0 2 _2&+
05AB1E , 8 bytes
Puerto de Dennis 'Jelly respuesta
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Ruby, 38 + 6 = 44 bytes
Requiere opciones
-rprime
.Pruébalo en línea!
fuente
&
lugar de&&
JavaScript (ES6), 54 bytes
Mostrar fragmento de código
fuente
Excel VBA,
102100bytesSin incorporaciones de primalidad para VBA :(
Código
Función de ventana inmediata anónima de VBE que toma la entrada de la celda
[A1]
y emite1
(verdadero) o0
(falso) a la ventana Inmediato de VBEFunción auxiliar
Alternativamente, 122 bytes
Código
Solución basada en la función de comprobación de primitivas recursivas
Función auxiliar
fuente
PHP, 85 bytes 24 bytes gracias a Mayube
fuente
a
yb
)function
palabra clave?Python 2 , 75 bytes
Pruébalo en línea!
fuente
Japt , 13 bytes
Devuelve
true
yfalse
si el número es o no parte de un par gemelo primo.Pruébalo en línea!
Explicación
Implícito:
U
= entero de entradaCompruebe si la entrada es primo (
j
), Y (©
) ...Usando la matriz
[U+2, U-2]
, verifique si algún elemento es verdadero (d
) de acuerdo con la función de primalidad (j
).Salida implícita del resultado booleano de
is input prime AND is any ±2 neighbor prime
.fuente
[U+2U-2]
podría ser mucho más corto, pero no puedo entender cómo ...