La secuencia de Fibonacci es una secuencia bien conocida en la que cada entrada es la suma de las dos anteriores y las dos primeras entradas son 1. Si tomamos el módulo de cada término por una constante, la secuencia se volverá periódica. Por ejemplo, si decidimos calcular la secuencia mod 7 obtendríamos lo siguiente:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Tiene un período de 16. Una secuencia relacionada, llamada secuencia de Pisano , se define de manera tal que a(n)
es el período de la secuencia de Fibonacci cuando se calcula el módulo n.
Tarea
Deberá escribir un programa o función que, cuando se proporcione n
, calculará y generará el período del mod de secuencia de Fibonacci n
. Ese es el enésimo término en la secuencia de Pisano.
Solo debe admitir enteros en el rango 0 < n < 2^30
Esta es una competencia de código de golf , por lo que debe intentar minimizar el tamaño de su código fuente según la puntuación por bytes.
Casos de prueba
1 -> 1
2 -> 3
3 -> 8
4 -> 6
5 -> 20
6 -> 24
7 -> 16
8 -> 12
9 -> 24
10 -> 60
11 -> 10
12 -> 24
f(i),f(i+1)
puede tomar en la mayoría de los n^2
valores mod n
. Por lo tanto, n
limitado a 2^30
podría terminar produciendo un período de hasta 2^60
. Restringiría n <= 2^16
daría P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, por lo que el 'estado' de una máquina en bucle durante el período se puede describir con un par de mods de enteros n
. Hay en la mayoría de los n^2
estados, por lo que el período es como máximo n^2
. Oh! Wikipedia afirma que el período es como máximo 6n
. No importa mi trivialidad.