Supongamos que comenzamos con la lista infinita de números primos:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, ...
Luego, tomamos las diferencias absolutas entre cada par de números, repetidamente:
[1, 2, 2, 4, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, ...
[1, 0, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 0, 4, 4, 2, ...
[1, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 4, 0, 2, ...
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...
Observe que el número inicial es 1 cada vez. La conjetura de Gilbreath es la predicción de que este seguirá siendo el caso para siempre.
La única forma en que el número inicial dejaría de ser un 1 es si el siguiente número después de que no fuera ni un 0 ni un 2. La única forma en que el segundo número no sería un 0 o un 2 es si el número después de eso no era ni un 0 ni un 2. Y así sucesivamente.
El índice del primer número, que no sea el 1 inicial, que no es ni un 0 ni un 2, nunca puede bajar más de 1 entre un par de secuencias consecutivas. Este hecho se ha utilizado para poner un límite inferior muy fuerte cuando, si alguna vez, una secuencia puede no tener un 1 como primer elemento.
En este desafío, se le dará el índice de una secuencia, y debe generar el índice del primer número en esa secuencia que no es el 1 inicial, y no es un 0 o un 2.
Por ejemplo, en la cuarta secuencia de diferencia absoluta anterior:
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...
La primera entrada que no es un cero o un dos, que no sea la primera entrada, es la posición 15, 14 cero indexado. Entonces, si la entrada era 4, saldría 14.
Para entradas del 1 al 30, las salidas deben ser:
[3, 8, 14, 14, 25, 24, 23, 22, 25, 59, 98, 97, 98, 97, 174, 176, 176, 176, 176, 291, 290, 289, 740, 874, 873, 872, 873, 872, 871, 870]
Este es OEIS A000232 .
Esto supone que tiene 1 entradas indexadas y 0 salidas indexadas. Puede indexar sus entradas y salidas comenzando en cualquier número entero constante, siempre que pueda aceptar el rango de entradas correspondiente a todas las secuencias.
Requisitos: su solución debe ejecutarse como máximo 1 minuto con una entrada de hasta 30. Si está lo suficientemente cerca como para depender de las especificaciones de la computadora, está permitido.
El código más corto gana.
fuente
Respuestas:
Jalea , 17 bytes
Pruébalo en línea!
La entrada es de 2 índices. La salida es 1 indexación.
En TIO, todos los casos de prueba en total toman 22.309 s.
fuente
Mathematica, 66 bytes
Función pura que toma un entero positivo como argumento y devuelve un entero indexado 1.
Nest[Abs@*Differences,Array[Prime,z+#],#]
calcula la#
lista de diferencia absoluta iterada de la lista de los primerosz+#
números primos.For[z=1,Last@...<3,z++]
realiza un bucle de este cálculo hasta que el último elemento de la lista resultante es al menos3
, y luegoz
sale. (¡Tenga en cuenta que la corrección del algoritmo supone la conjetura de Gilbreath!)fuente
Pyth , 32 bytes
Pruébalo en línea!
Utiliza 2-indexación.
fuente
MATL , 18 bytes
La entrada y la salida están basadas en 1. Se tarda menos de 40 segundos en TIO para cada uno de los casos de prueba.
Pruébalo en línea!
Explicación
Esto sigue probando secuencias iniciales más largas de primos hasta que las diferencias consecutivas absolutas iteradas den al menos un valor superior
2
.fuente
Perl 6 ,
136120 bytesSin golf:
Con una entrada de 30, la función se ejecuta en aproximadamente cuatro segundos en mi modesta computadora portátil.
... que se convierte en 1,4 segundos después de actualizar mi instalación de Perl 6 de siete meses (que también me da el
skip
método que me permite eliminar varios bytes de mi primera solución). Todos los casos de prueba del 1 al 30 tardan unos diez segundos.fuente
Haskell , 94 bytes
Pruébalo en línea! La última línea es una función anónima. Ate a eg
g
y llame comog 4
. Todos los casos de prueba combinados toman menos de 2 segundos con TIO.Cómo funciona
[n|n<-[2..],all((>0).mod n)[2..n-1]]
genera una lista infinita de primos.f(a:b:r)=abs(a-b):f(b:r)
es una función que produce las diferencias absolutas de los elementos de una lista infinita. Dado un númeron
,(iterate f[n|n<-[2..],all((>0).mod n)[2..n-1]]!!)
aplicaf
n
tiempos a la lista de primos.length.fst.span(<3)
calcula la longitud del prefijo de la lista resultante donde los elementos son más pequeños 3.fuente
Axioma, 289 bytes
deshazte de él y prueba
si no encuentra la solución, expanda la lista principal de 2 * x en un bucle y vuelva a calcular todas las listas restantes. 3 segundos para encontrar g (30)
fuente