Fondo
La mayoría de ustedes saben qué es un número de Fibonacci . Algunos de ustedes pueden saber que todos los enteros positivos se pueden representar como una suma de uno o más números distintos de Fibonacci, de acuerdo con el Teorema de Zeckendorf . Si el número de términos en la representación óptima de Zeckendorf de un número entero n
es en sí mismo un número de Fibonacci, llamaremos a n
Fibonacci "en secreto".
Por ejemplo:
139 = 89 + 34 + 13 + 3
This is a total of 4 integers. Since 4 is not a Fibonacci number, 139 is not secretly Fibonacci
140 = 89 + 34 + 13 + 3 + 1
This is a total of 5 integers. Since 5 is a Fibonacci number, 140 is secretly Fibonacci
Notas
- La representación óptima de Zeckendorf se puede encontrar utilizando un algoritmo codicioso. Simplemente tome el número de Fibonacci más grande <= n y reste de n hasta llegar a 0
- Todos los números de Fibonacci se pueden representar como la suma de 1 número de Fibonacci (sí mismo). Como 1 es un número de Fibonacci, todos los números de Fibonacci también son secretamente Fibonacci.
Reto
Su desafío es escribir un programa o función que tome un entero y devuelva si ese entero es secretamente Fibonacci.
Entrada
Puede tomar información en cualquier formato razonable. Puede suponer que la entrada será un solo entero positivo.
Salida
Produzca uno de dos resultados distintos para saber si la entrada es secretamente Fibonacci. Los ejemplos incluyen True
/ False
, 1
/ 0
, etc.
Tanteo
Este es el código de golf , por lo que la respuesta más corta en bytes gana Las lagunas estándar están prohibidas.
Casos de prueba
Truthy (secretly Fibonacci)
1
2
4
50
140
300099
Falsey (NOT secretly Fibonacci)
33
53
54
139
118808