Contexte
La plupart d'entre vous savent ce qu'est un numéro de Fibonacci . Certains d'entre vous savent peut-être que tous les nombres entiers positifs peuvent être représentés comme la somme d'un ou plusieurs nombres de Fibonacci distincts, selon le théorème de Zeckendorf . Si le nombre de termes dans la représentation optimale de Zeckendorf d'un entier n
est lui-même un nombre de Fibonacci, nous appellerons n
"secrètement" Fibonacci.
Par exemple:
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
Remarques
- La représentation optimale de Zeckendorf peut être trouvée en utilisant un algorithme gourmand. Prenez simplement le plus grand nombre de Fibonacci <= n et soustrayez-le de n jusqu'à ce que vous atteigniez 0
- Tous les nombres de Fibonacci peuvent être représentés comme une somme de 1 nombre de Fibonacci (lui-même). Puisque 1 est un nombre de Fibonacci, tous les nombres de Fibonacci sont également secrètement Fibonacci.
Défi
Votre défi est d'écrire un programme ou une fonction qui prend un entier et retourne si cet entier est secrètement Fibonacci.
Contribution
Vous pouvez prendre des contributions dans n'importe quel format raisonnable. Vous pouvez supposer que l'entrée sera un seul entier positif.
Sortie
Sortie l'un des deux résultats distincts pour savoir si l'entrée est secrètement Fibonacci. Les exemples incluent True
/ False
, 1
/ 0
, etc.
Notation
C'est le golf de code , donc la réponse la plus courte en octets gagne! Les failles standard sont interdites.
Cas de test
Truthy (secretly Fibonacci)
1
2
4
50
140
300099
Falsey (NOT secretly Fibonacci)
33
53
54
139
118808