思路:枚举出自然数。然后对其进行拆分输出
#include<bits/stdc++.h>
using namespace std;
long long f[87],t,n,i;
int dfs(long long a, long long b) {
long long 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()
{
//freopen("a.in","r",stdin);
//freopen("b.out","w",stdout);
cin>>t;
f[0]=1;
f[1]=1;
for(i=2;i<=86;i++)f[i]=f[i-1] + f[i-2];
while(t--)
{
cin>>n;
cout<<dfs(n,86)<<endl;
}
return 0;
}