Editorial for Fibonacci, de nuevo
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Sea
El vector que representa un par arbitrario de elementos consecutivos de Fibonacci.
Y sea una matriz que cumple:
En otras palabras, al multiplicar (por la izquierda) al vector, resulta el siguiente par consecutivo de Fibonacci, la matriz que cumple esto es:
Tambien existe una matriz tal que:
Donde es la matriz identidad.
La matriz que cumple esto es:
Y en efecto se cumple:
Se puede demostrar también que
Entonces, supongamos que la solución a el problema, la cual llamaremos (se asegura que la solución es menor o igual que ) se puede escribir de la siguiente forma: Donde son enteros no negativos arbitrarios.
Y sabemos que
La solución la podemos escribir como:
(Multiplicamos a la izquierda ambos miembros por )
Utilizando esto podemos fijar a un entero lo suficientemente grande y memoizar en un mapa todos los números de Fibonacci hasta junto con su índice, en cada consulta solo quedaría iterar desde hasta y calcular el lado izquierdo de la ecuación usando exponenciación binaria, si existe en el mapa, la solución es
Complejidad de preprocesar (usando un mapa ordenado)
Complejidad de cada consulta (lo cual es asintótico con , pero deja más claro que la constante no es muy grande)
Nos queda una complejidad temporal:
Y si hacemos
Nos queda:
Ejercicio para el lector:
Resolverlo en
Comments