fundo
Muitos de vocês sabem o que é um número de Fibonacci . Alguns de vocês devem saber que todos os números inteiros positivos podem ser representados como uma soma de um ou mais números distintos de Fibonacci, de acordo com o Teorema de Zeckendorf . Se o número de termos na representação ideal de Zeckendorf de um número inteiro n
for ele próprio um número de Fibonacci, chamaremos n
Fibonacci "secretamente".
Por exemplo:
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
- A representação ideal de Zeckendorf pode ser encontrada usando um algoritmo guloso. Basta pegar o maior número de Fibonacci <= n e subtraí-lo de n até chegar a 0
- Todos os números de Fibonacci podem ser representados como uma soma de 1 número de Fibonacci (ele mesmo). Como 1 é um número de Fibonacci, todos os números de Fibonacci também são secretamente Fibonacci.
Desafio
Seu desafio é escrever um programa ou função que use um número inteiro e retorne se esse número inteiro é secretamente Fibonacci.
Entrada
Você pode receber informações em qualquer formato razoável. Você pode assumir que a entrada será um único número inteiro positivo.
Saída
Saída de um dos dois resultados distintos para saber se a entrada é secretamente Fibonacci. Exemplos incluem True
/ False
, 1
/ 0
, etc.
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence! As brechas padrão são proibidas.
Casos de teste
Truthy (secretly Fibonacci)
1
2
4
50
140
300099
Falsey (NOT secretly Fibonacci)
33
53
54
139
118808