Un número es un número de Polignac si y solo si es impar y no se puede representar en la forma p + 2 n donde n es un número entero no negativo y p es un número entero primo.
Tarea
Escriba un código que tome un número entero positivo y determine si es un número de Polignac. Puede generar dos valores distintos, uno para verdadero y otro para falso. Debe intentar minimizar su recuento de bytes.
Casos de prueba
Para casos positivos aquí está el OEIS
1, 127, 149, 251, 331, 337, 373, 509, 599, 701, 757, 809, 877, 905, 907, 959, 977, 997, 1019, 1087, 1199, 1207, 1211, 1243, 1259, 1271, 1477, 1529, 1541, 1549, 1589, 1597, 1619, 1649, 1657, 1719, 1759, 1777, 1783, 1807, 1829, 1859, 1867, 1927, 1969, 1973, ...
Aquí hay algunos casos negativos:
22, 57
code-golf
number
number-theory
decision-problem
Asistente de trigo
fuente
fuente
Respuestas:
Japt ,
91413 bytes¡Pruébelo en línea! o Encuentra todos los enteros de Polignac menores de 1000 .
Salidas
1
para entradas falsas y0
para la verdad.Explicación
fuente
false
pero no son números de Polignac.3
está arreglado, pero no tuvimos que manejar incluso los casos al principio. Fijación.3
no costara bytes, entonces vi la solución para2
... ¡Ay!Jalea ,
1110 bytesGuardado 1 byte gracias a @Dennis
Pruébalo en línea!
Cómo funciona
fuente
Ḷ2*⁸_ÆPS<Ḃ
Guarda un byte. tio.run/##ASQA2/9qZWxsef//4bi2Mirigbhfw4ZQUzzhuIL/…¬;ḂẠ
.S<Ḃ
sin embargo, al menos para mí :-)JavaScript (ES6),
56 5453 bytesDevuelve0 0 o 1 .
Pruébalo en línea!
¿Cómo?
Comenzamos conp = 1 . Probamos siy= n - p es compuesto y producimos un booleano en consecuencia. La siguiente prueba se realiza conp × 2 .
Tan pronto comopags es mayor quenorte , detenemos la recursividad y devolvemos norte .
Los resultados de todas las iteraciones son AND juntos, coaccionando los valores booleanos a0 0 o 1 .
Siempre que todos los resultados intermedios sean verdaderos, terminamos con una prueba de bits como:
1 & 1 & 1 & n
Esto da1 si y solo sinorte es impar, que es la última condición requerida para validar la entrada como un número de Polignac.
fuente
n%2
o similar: PPython 2 ,
605756 bytesPruébalo en línea!
fuente
&n&
. El número 5 sería un falso negativo si fuera un número de Polignac, porque 1 + 4 = 5, pero esto no es un problema porque 2 + 3 = 5 de todos modos.Jalea , 10 bytes
Una presentación alternativa de 10 bytes Jelly a la ya publicada.
Un enlace monádico regresando 1 para los números de Polignac y 0 en caso contrario.
Pruébalo en línea!o ver los menores de 1000 .
¿Cómo?
fuente
05AB1E ,
98 bytes-1 byte gracias a Emigna
Salidas
0
para entradas verdaderas y1
para entradas falsas.Pruébalo en línea!
fuente
1å
podría serZ
.Python 2 , 99 bytes
Pruébalo en línea!
-4 bytes gracias a Leaky Nun
-2 bytes gracias a Wondercricket
+8 bytes para corregir un error
-1 byte gracias al Sr. Xcoder
-3 bytes gracias a Einkorn Enchanter
+12 bytes para corregir un error
fuente
Regex (ECMAScript), 97 bytes
Este problema planteó un caso interesante para solucionar el problema de la falta de anticipación no atómica. Y es el único momento hasta el momento en que tengo una buena razón para probar ambas versiones del poder de 2
((x+)(?=\2$))*x$
y(?!(x(xx)+)\1*$)
, en la misma expresión regular, y el único momento hasta el momento que necesito para proteger la prueba principal contra la coincidencia. 1, como(?!(xx+)\1+$)xx
, cuando se usa en una expresión regular más grande.^(?!(xx)*$|(x+)((?!(xx+)\4+$).*(?=\2$)((x+)(?=\6$))*x$|(?!(x(xx)+)\7*$).*(?=\2$)(?!(xx+)\9+$)xx))
Pruébalo en línea!
Regex (ECMAScript + lookahead molecular),
5352 bytes^(?!(xx)*$|(?*xx+(((x+)(?=\4$))*x$))\2(?!(xx+)\5+$))
Esta versión no solo es mucho más limpia, sino también mucho más rápida, porque en lugar de tener que recorrer todas las formas posibles en que N es la suma de dos números, simplemente puede recorrer en ciclo restando cada potencia de 2 de N y probar la diferencia para ser primo .
El lookahead molecular se puede convertir fácilmente en un lookbehind de longitud variable:
Regex (.NET o ECMAScript 2018),
5554 bytes^(?!(xx)*$|xx+(((x+)(?=\4$))*x$)(?<=(?<!^\5+(x+x))\2))
Pruébalo en línea! (.NET) ¡
Pruébelo en línea! (ECMAScript 2018)
fuente
^(?!(x+)((?!(xx+)\3+$)x*(?!(x(xx)+)\4*$)|x(?!(x(xx)+)\6*$)x*(?!(xx+)\8+$)x)?\1$)
sin demasiada dificultad. Luego, con un pensamiento cuidadoso, se puede jugar más al golf^(?!(x+)((x?)(?!(x(x\3)+)\4+$)x*(?!(x(xx)+|\3\3+)\6+$)\3)?\1$)
. Más corto aún puede ser posible(x(xx)+|\3\3+)
->(x\3?(xx)+)
Mathematica, 41 bytes
fuente
PrimeQ[#-2^Range[0,Log2@#]]
conPrimeQ[#-2^Range[0,#]]
y luego porPrimeQ[#-2^Range@#/2]
.PHP , 75 bytes
imprime 1 para veracidad y 0 para falsedad
Pruébalo en línea!
Pruébalo en línea! Polignac enteros menores de 10000
fuente
Pari / GP , 34 bytes
Pruébalo en línea!
fuente
Brachylog ,
1513 bytesPruébalo en línea!
Salida de números de Polignac hasta 1000.
Devoluciones
false.
para números de Polignac ytrue.
otros.Basado en la respuesta eliminada de @ LeakyNun, con algunas correcciones de errores (publicadas con su permiso).
(-2 bytes usando el método de @Jonathan Allan para verificar si el número es una potencia de dos).
El número dado no es un número de Polignac si:
fuente
=h2
sería 1 byte más corto pero tampoco funciona para3
ninguno.Jalea , 13 bytes
Pruébalo en línea!
Salidas
1
para falso y0
para verdadero.fuente
Ḷ2*ạfÆRṆ
luego verifique la paridadḶ2*ạfÆRṆo‘Ḃ
regresa1
para ambos127
y22
; eso no está bien. A menos que eso no sea lo que sugirió.0
por 149.ạ
a lo_@
arregla.Perl 6 , 55 bytes
Pruébalo en línea!
(1, 2, 4 ... * > $_)
es una secuencia de las potencias de dos hasta el argumento de entrada (Perl infiere la serie geométrica de los elementos proporcionados).grep &is-prime, ^$_
es la lista de números primos hasta el argumento de entrada.[X+]
evalúa la suma de todos los elementos del producto cruzado de las dos series.Podría haber prescindido
so
de dos bytes menos, pero luego devuelve dos valores falsos distintos (0
yFalse
).fuente
Axioma, 86 bytes
prueba y resultados
fuente
Haskell,
104102 bytesExplicación
(+)
funciones parciales aplicadas a 2 ^ que se aplica a una lista [0..input]ACTUALIZACIÓN: ¡Grite a Einkorn Enchanter por jugar al golf dos bytes!
fuente
p x=[x]==[i|i<-[2..x],x`mod`i<1]
es una prueba de primalidad más corta.filter p[1..k]
lugar defilter(p)[1..k]
Lisp común, 134 bytes
Regrese
NIL
cuando el argumento sea un número de Polignac, de loT
contrario.Pruébalo en línea!
Sin golf:
fuente
APL (Dyalog Extended) , 12 bytes
Pruébalo en línea!
Prefijo anónimo función tácita. Devuelve 1 para la verdad, 0 para la falsedad.
En gran parte basado en la respuesta Japt de ETHProductions .
Gracias a @ Adám por ayudarme con el golf mi respuesta original, y por hacer Dyalog Extended para el caso.
Cómo:
fuente
Python 2 , 98 bytes
Pruébalo en línea!
fuente
Pyth , 14 bytes
¡Intentalo!
fuente
Julia 0.4 , 31 bytes
Pruébalo en línea!
fuente
APL (NARS) 80 caracteres, 160 bytes
La función 0π es la función que devuelve su argumento es primo o no. Para mí, esta función no ha sido recursiva, por lo que es un poco más larga ... Prueba:
para entrada <= 0 o entrada> = 9E9 devuelve ¯1 (error)
fuente
C # (compilador interactivo de Visual C #) , 107 bytes
Pruébalo en línea!
No es el código más eficiente, pero parece funcionar. Mi solución original filtró los primos antes de probarlos en la fórmula y funcionó mucho mejor. La versión actual es 11 bytes más corta.
fuente