Inspirado por esta pregunta Math.SE .
Antecedentes
La secuencia de Fibonacci (llamada F
) es la secuencia, comenzando de 0, 1
tal manera que cada número (F(n)
) (después de los dos primeros) es la suma de los dos anteriores ( F(n) = F(n-1) + F(n-2)
).
Una secuencia de Fibonacci mod K (llamada M
) es la secuencia de los números de Fibonacci mod K ( M(n) = F(n) % K
).
Se puede demostrar que la secuencia de Fibonacci mod K es cíclica para todo K, ya que cada valor está determinado por el par anterior, y solo hay K 2 posibles pares de enteros no negativos, ambos menos que K. Debido a que la secuencia de Fibonacci mod K es cíclico después de su primer par de términos repetidos, un número que no aparece en la secuencia de Fibonacci mod K antes de que nunca aparezca el primer par de términos repetidos.
Para K = 4
0 1 1 2 3 1 0 1 ...
Para K = 8
0 1 1 2 3 5 0 5 5 2 7 1 0 1 ...
Tenga en cuenta que para K = 8, 4 y 6 no aparecen antes de la repetición 0 1
, por lo que 4 y 6 nunca aparecerán en la secuencia 8 de Fibonacci mod.
Desafío
Dado un entero K estrictamente mayor que 0, genera todos los enteros no negativos menores que K que no aparecen en la secuencia de Fibonacci mod K.
Reglas
Puede suponer que K encajará en su tipo entero nativo ( dentro de lo razonable ).
Si hay números no negativos menores que K que no aparecen en la secuencia de Fibonacci mod K, su programa / función debería generar todos esos números de manera razonable.
Si no hay enteros no negativos menores que K que no aparecen en la secuencia de Fibonacci mod K, su programa / función puede indicar esto devolviendo una lista vacía, sin imprimir nada, produciendo un error, etc.
El orden no importa.
Este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
Casos de prueba
¡Genere casos de prueba en línea!
Casos de prueba no vacíos
8 [4, 6]
11 [4, 6, 7, 9]
12 [6]
13 [4, 6, 7, 9]
16 [4, 6, 10, 12, 14]
17 [6, 7, 10, 11]
18 [4, 6, 7, 9, 11, 12, 14]
19 [4, 6, 7, 9, 10, 12, 14]
21 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19]
22 [4, 6, 7, 9, 15, 17, 18, 20]
23 [4, 7, 16, 19]
24 [4, 6, 9, 11, 12, 14, 15, 18, 19, 20, 22]
26 [4, 6, 7, 9, 17, 19, 20, 22]
28 [10, 12, 14, 16, 18, 19, 23]
29 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27]
31 [4, 6, 9, 12, 14, 15, 17, 18, 19, 22, 25, 29]
32 [4, 6, 10, 12, 14, 18, 20, 22, 26, 28, 30]
33 [4, 6, 7, 9, 15, 17, 18, 20, 24, 26, 27, 28, 29, 31]
34 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30]
36 [4, 6, 7, 9, 10, 11, 12, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32]
37 [9, 10, 14, 17, 20, 23, 27, 28]
38 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 36]
39 [4, 6, 7, 9, 15, 17, 19, 20, 22, 24, 30, 32, 33, 35]
...
200 [4, 6, 12, 14, 20, 22, 28, 30, 36, 38, 44, 46, 52, 54, 60, 62, 68, 70, 76, 78, 84, 86, 92, 94, 100, 102, 108, 110, 116, 118, 124, 126, 132, 134, 140, 142, 148, 150, 156, 158, 164, 166, 172, 174, 180, 182, 188, 190, 196, 198]
...
300 [6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138, 150, 162, 174, 186, 198, 210, 222, 234, 246, 258, 270, 282, 294]
...
400 [4, 6, 10, 12, 14, 20, 22, 26, 28, 30, 36, 38, 42, 44, 46, 52, 54, 58, 60, 62, 68, 70, 74, 76, 78, 84, 86, 90, 92, 94, 100, 102, 106, 108, 110, 116, 118, 122, 124, 126, 132, 134, 138, 140, 142, 148, 150, 154, 156, 158, 164, 166, 170, 172, 174, 180, 182, 186, 188, 190, 196, 198, 202, 204, 206, 212, 214, 218, 220, 222, 228, 230, 234, 236, 238, 244, 246, 250, 252, 254, 260, 262, 266, 268, 270, 276, 278, 282, 284, 286, 292, 294, 298, 300, 302, 308, 310, 314, 316, 318, 324, 326, 330, 332, 334, 340, 342, 346, 348, 350, 356, 358, 362, 364, 366, 372, 374, 378, 380, 382, 388, 390, 394, 396, 398]
...
Casos de prueba vacíos (sin salida, error, lista vacía, etc., es un resultado aceptable)
1, 2, 3, 4, 5, 6, 7, 9, 10, 14, 15, 20, 25, 27, 30, 35 ... 100 ...
Respuestas:
Jalea ,
98 bytesPruébalo en línea!
Basado en el período pisano
p(n) <= 6n
desde A001175 . Además,p(n) <= 6n <= n^2
porn >= 6
yp(n) <= n^2
paran < 6
. Guardado este byte gracias a Dennis.fuente
²
debería funcionar en lugar de×6
.Haskell , 70 bytes
Cierta cantidad de bytes guardados gracias a Esolanging Fruit
8 bytes guardados gracias a Laikoni
Pruébalo en línea!
fuente
read$show
funciona en lugar defromInteger
en este caso y guarda dos bytes.zip[1..x^2]
para truncar ahorra algunos bytes más: ¡ Pruébelo en línea!Perl 6 ,
43 42 3932 bytesPruébalo
Pruébalo
Pruébalo
Pruébalo
Expandido:
fuente
> <> , 48 bytes
Pruébalo en línea!
Toma entrada a través de la bandera -v.
Imprime una gran cantidad de líneas nuevas en exceso, pero hace el trabajo. Básicamente, esto usa la primera línea para almacenar el conjunto de números que han aparecido hasta ahora en la secuencia.
Cómo funciona:
fuente
Python 2 , 69 bytes
Pruébalo en línea!
fuente
MATL ,
1918 bytesPruébalo en línea!
-1 byte gracias a Guiseppe.
fuente
X~
!Python 3 , 91 bytes
Pruébalo en línea!
fuente
cascarilla ,
13 1210 bytes¡Gracias @Zgarb por -2 bytes!
Imprime una lista vacía en caso de que aparezcan todos los enteros, pruébelo en línea!
Explicación
fuente
U2
para obtener el prefijo más largo donde no se repite ningún par adyacente.Python 3 , 78 bytes
Pruébalo en línea!
Imprime un conjunto, por lo que la salida para casos de prueba vacíos es
set()
, que es el conjunto vacío.fuente
R,
9286 bytes¡Gracias a @Giuseppe por guardar 6 bytes!
Pruébalo en línea!
Implementación bastante sencilla ( versión anterior , pero el mismo concepto):
fuente
setdiff
, ¡ buena idea!1:k^2
enfoque que todos los demás usanPython 3,
173152143131 bytesUn agradecimiento especial a @ovs.
Pruébalo en línea
¿Como funciona?
La primera función toma dos parámetros myn, y devuelve el enésimo número de Fibonacci mod m. La segunda función recorre los números de Fibonacci mod k y comprueba si 0 y 1 se repiten. Almacena los números en una lista y lo compara con una lista que contiene los números 1-n. Se eliminan los números duplicados y se devuelven los números restantes.
fuente
set()
comparaciones encadenadas.05AB1E , 10 bytes
Pruébalo en línea!
-3 bytes gracias a Emigna.
fuente
Ruby , 47 bytes
Pruébalo en línea!
Si bien utiliza parte de la misma lógica, esto no se basa en la respuesta de GB .
Explicación:
fuente
Lisp común, 106 bytes
Pruébalo en línea!
fuente
Pari / GP , 55 bytes
Pruébalo en línea!
fuente
Elixir ,
148144 bytesPruébalo en línea!
No es una respuesta especialmente competitiva, ¡pero fue muy divertido jugar al golf! Elixir es un lenguaje bastante legible, pero sigue una explicación del desorden de los personajes en el medio.
Esta explicación está en dos secciones, el mod-fibonacci y el funcionamiento en él.
Mod-fib:
Esto devuelve una corriente infinita de mod de Fibonacci
x
. Comienza con un acumulador{1,1}
y aplica la siguiente operación hasta el infinito: acumulador dado{p,n}
, salidap mod x
a la secuencia. Luego, configure el acumulador en{n,p+n}
.El resto:
fuente
SNOBOL4 (CSNOBOL4) , 153 bytes
Pruébalo en línea!
fuente
Ruby ,
5553 bytesPruébalo en línea!
fuente
JavaScript (ES6), 84 bytes
fuente
Python 3, 76 bytes
Esto simplemente examina el ciclo más largo posible de números de Fibonnaci (n ^ 2) y crea una lista de todos los números que ocurren en ese momento. Para simplificar la lógica, los números se almacenan en el módulo n.
fuente