Un primo de Pillai es un número primo para el que existe un positivo tal que
En otras palabras, un número entero es un primo de Pillai si es un número primo , si existe otro número entero positivo tal que el factorial de , más es divisible por y si no es divisible por .
Dado un entero positivo como entrada, decida si es un primo Pillai. La secuencia de los primos de Pillai es OEIS A063980 .
Por ejemplo, es primo de Pillai porque:
- Es un número primo, que tiene solo 2 factores.
- y satisfacer las condiciones anteriores: y no divide ; y tampoco divide 22 .
Casos de prueba
Verdad:
23 59 83 109 139 593
Falsy
5 5 7 7 8 73 89 263 437
Para los casos de verdad, las m respectivas son [(23, [14, 18]), (59, [15, 40, 43]), (83, [13, 36, 69]), (109, [86]), (139, [16]), (593, [274])]
.
Puede seguir el formato estándar de salida del problema de decisión (es decir, valores de verdad / falsedad) o tener un valor consistente para primos de Pillai y un valor no consistente de otra manera o viceversa .
Puede competir en cualquier lenguaje de programación y puede tomar entradas y proporcionar salidas a través de cualquier método estándar , mientras toma nota de que estas lagunas están prohibidas por defecto. Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
fuente
[(23, 14), (23, 18), (59, 15), (59, 40), (59, 43), (83, 13), (83, 36), (83, 69), (109, 86), (139, 16), (593, 274)]
. También los he agregado al desafío.Respuestas:
Python 2 ,
115111110109 bytes-6 bytes gracias al Sr. Xcoder
Pruébalo en línea!
Las funciones constan de dos partes
~-n%x<1or~f(x)%n>0
que verifican sin
no cumple con las "condiciones de Pillai", yn%x>0
para la validación principal.Después de que
all
se aplica a ambos elementos, el primer elemento contendráFalse
/0
si no es un "número Pillai" válida, y el segundo contendráTrue
/1
sin
es primo.Estos se pasan a los
cmp
que volverán-1
en este cenario (es un Pillai prime válido). Las otras combinaciones[[0, 0], [1, 0], [1, 1]]
volverán0
o1
fuente
Jalea ,
118 bytesDevuelve 0 para Pillai prime, 1 de lo contrario.
Pruébalo en línea!
Cómo funciona
fuente
Pari / GP , 44 bytes
Pruébalo en línea!
fuente
Brachylog , 19 bytes
Pruébalo en línea!
Traducción bastante directa de la pregunta:
fuente
J ,
3026 bytes-4 bytes gracias a FrownyFrog
Pruébalo en línea!
Explicación:
fuente
1~:|
guardar 2 bytes.(]|1+!@[)
es solo(|1+!)~
~
y tiene sentido con tu comentario anterior.Python 2 ,
65645352 bytesLa salida es por presencia o ausencia de un error.
Pruébalo en línea!
fuente
Python 2 ,
109107bytesPruébalo en línea!
Explicación
La
l
encuentra el factorial del número aprobada en, por lo5
que los rendimientos de entrada120
.Las
all(p%i for i in range(2,p-1))
verificaciones para ver si un número es primo, ignoramos 0 y 1 ya que nuestras otras condiciones ya las descartan.Finalmente, usamos
any(~-p%m>-~l(m)%p==0for m in range(2,p))
para iterar a través de todas las posibles m buscando para ver si alguna satisface nuestras necesidades.~-p
significap+1
. Luego verificamos si es mayor que-~l(m)%p
(lo que se traduce en(m!-1)%p
, y luego lo comparamos0
. Básicamente~-p%m
debe ser mayor que 0 y-~l(m)%p
debe ser 0.Fuentes
Mejoras
fuente
como probablemente puede ver en el enlace tio, no todos los casos pasan, eso es porque js no puede manejar números grandes, si tal requisito existe, trataré de implementarlo :)
hay una doble verificación
F%n>n-2&(F+1)%n<1
para evitar falsos positivos (pero no al revés con problemas de números grandes de js, realmente necesitamos(F+1)%n<1
números más pequeños que reduzcan el recuento de bytes de la solución a 60JavaScript (Node.js) ,
9088867268 bytesPruébalo en línea!
fuente
Brachylog , 13 bytes
Pruébalo en línea!
Tiene éxito para los primos de Pillai, proporcionando el m más pequeño a través de la variable de salida, y falla por cualquier otra cosa. Dado que una gran parte de cómo esto ahorra bytes sobre la solución de sundar es que calcula repetidamente las factorizaciones primas de algunos números bastante grandes, es bastante lento en entradas más grandes. (Probablemente ejecutaré esos casos en mi instalación local de Brachylog una vez que mi computadora portátil no esté funcionando con la batería).
fuente
[Perl], 45 bytes
El módulo de teoría de números tiene los predicados como funciones integradas (is_pillai en realidad devuelve 0 o la m más pequeña, por lo que también resuelve A063828). El código subyacente de C y Perl no tiene golf (por supuesto). El código C se ve así:
(genéricamente reemplace UV con uint64_t o similar, y HALF_WORD decide si podemos optimizar el mulmod en operaciones nativas simples).
El código puro de Perl es similar a:
fuente
C (gcc) , 64 bytes
Pruébalo en línea!
fuente
Whispers v2 , 230 bytes
Pruébalo en línea!
Esto devuelve una lista vacía para números primos que no son Pillai, y una lista no vacía de lo contrario.
Cómo funciona
Whispers fue diseñado para la manipulación de números reales / complejos, con un poco de comandos de matriz agregados para una buena medida, de ahí el uso repetido de
Each
iterar sobre las listas generadas.Un poco de historia sobre Whispers:
Whispers es ligeramente diferente en su ruta de ejecución a la mayoría de los otros idiomas. En lugar de trabajar a través de cada línea linealmente, solo ramificándose en condicionales, Whispers comienza en la última línea del archivo que comienza con
>
(las reglas son un poco más complicadas que eso, pero eso es todo lo que necesitamos saber por ahora), y el significado de los números difieren, dependiendo de si la línea comienza con>
o>>
.Si la línea comienza con
>
, como> 1
o> Input
, esta es una línea constante : devuelve el mismo valor cada vez. Aquí, los números representan su forma numérica, por lo que la primera línea siempre devolverá 1 cuando se llame.>>
Sin embargo, si la línea comienza con , los números se tratan como referencias a otras líneas, más o menos como llamadas a funciones, si lo desea. Por ejemplo, en la línea>> 1…2
, esto no ejecuta el…
comando en los enteros 1 y 2 , sino en los valores devueltos por las líneas 1 y 2 . En este caso, esos valores son el número entero 1 y cualquier entero que se nos pase como entrada.Para este ejemplo, consideremos la entrada de 23 . Tenga en cuenta que, debido al preprocesamiento de Whispers, la segunda línea (
> Input
) se convierte a> 23
.Nuestro primer comando está en la línea 3:
>> 1…2
.…
es un rango diádico, en este caso de 1 a 23 , produciendo {1, 2, ... 22, 23} . A continuación, saltamos a las líneas 9 a 12 :Aquí tenemos 4
Each
enunciados consecutivos , cada uno de los cuales itera sobre el resultado anterior, esencialmente mapeando los 4 comandos sobre la matriz en la línea 3 : el rango. Las primeras tres declaraciones son mapas simples, con líneas 4 , 5 y 6 :Estos tres comandos, sobre un número entero n , producen (n! +1) ∣x , donde ! denota factorial , ∣ denota divisibilidad y x es la entrada. Finalmente, la línea 12 tiene una estructura de mapa diádico .
Una estructura de mapa diádico toma tres enteros: el objetivo, el izquierdo y el derecho, cada uno indexa a otras líneas. Aquí, comprimimos la izquierda y la derecha para producir una lista de pares, luego reducimos cada par mediante el comando diádico (el objetivo). Aquí, si la entrada es 23 , las listas son {1, 2, ... 22, 23} y {0, 0, ... 1, 0} y el comando es
que multiplica el argumento izquierdo por el derecho. Esto produce una matriz de enteros, con 0 en los índices de enteros cuyos factoriales incrementados no son divisibles por las entradas, y el índice original donde están. Vamos a llamar a esta matriz A . A continuación, eliminamos los 0 s de A tomando la diferencia establecida entre {0} y A :
Con nuestro ejemplo de entrada, esto produce el conjunto {14, 18, 22} . A continuación, tomamos el resto de la entrada que se divide por cada valor en el conjunto, y verificamos si ese resto no es igual a 1 :
Nuevamente, tenemos una lista de 0 o 1 sy necesitamos eliminar los 0 sy reemplazar los 1 s con los valores originales. Aquí repetimos el código que vimos arriba, pero con
>> 18∖13
más que con12
. Finalmente, lanzamos este conjunto resultante a una lista para una verificación final. Desafortunadamente, nuestro código también debe rechazar números compuestos que cumplan con todos estos criterios, como 437 . Entonces agregamos nuestra verificación final, multiplicando nuestra lista final por la primalidad de la entrada. Debido a cómo funciona la multiplicación de Python en las listas, 0 la reemplaza con una lista vacía y 1 no tiene ningún efecto. Entonces calculamos la primalidad de la entrada, multiplicamos eso por la lista de m s para la entrada y salida del resultado final:fuente
APL (NARS), 65 caracteres, 130 bytes
Aquí 23x significaría 23r1 y la fracción 23/1, entonces todos los demás; prueba:
fuente
C # (compilador interactivo de Visual C #) , 138 + 22 = 160 bytes
TIO no ha implementado la biblioteca System.Numerics en su lanzamiento de Mono, por lo que puede ver los resultados ¡
Pruébelo en línea!Aquí en cambio.Explicación:
fuente
CJam , 37 bytes
Salidas
11
si la entrada es un primer pillai, de lo contrario00
,01
o10
Explicación:
Pruébalo en línea!
fuente