题目传送门
题目背景
翻译自 ROIR 2023 D1T2。
斐波那契数指斐波那契数列(f0=1,f1=1,fi=fi−2+fi−1)中出现的数。
题目描述
给定一个自然数 n,求出将其表示为大于 1 的斐波那契数的乘积的方式数量。
输入格式
第一行一个数 t,表示数据组数。
接下来 t 行,每行输入一个数 n。
输出格式
对于每组测试数据,输出一个数表示答案。
厮箓
因为斐波那契数列增长速度很快,据统计10^18中只有86个斐波那契数列的数所以直接搜索就可以了首先递推出fib数列前86项然后找谁的乘积是n。
禔碣
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll f[87],t,n,i;
int dfs(ll a,ll b){
ll ans=0;
if(a==1)return 1;
if(b<=1)return 0;
while(a<f[b])b--;
if(a%f[b]==0)ans+=dfs(a/f[b],b);
return ans+dfs(a,b-1);
}
int main()
{
cin>>t;
f[0]=1;f[1]=1;
for(int i=2;i<=86;i++)f[i]=f[i-1]+f[i-2];
while(t--){
cin>>n;
cout<<dfs(n,86)<<endl;
}
return 0;
}