Fibonacci
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2960 Accepted Submission(s): 780
  Problem Description 
 
 
 
  Following is the recursive definition of Fibonacci sequence:
  
 
   
  
Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.
 
  
 
   Fi=???01Fi?1+Fi?2i = 0i = 1i > 1
  
 
  Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.
  Input 
 
 
 
  There is a number 
  
  T shows there are 
  
  T test cases below. (
  
  T≤100,000)
  
For each test case , the first line contains a integers n , which means the number need to be checked.
0≤n≤1,000,000,000
 
  
 For each test case , the first line contains a integers n , which means the number need to be checked.
0≤n≤1,000,000,000
  Output 
 
 
 
  For each case output "Yes" or "No". 
 
 
  
 
  Sample Input 
 
 
 3 4 17 233
  Sample Output 
 
 
 Yes No Yes
AC代码:
#include<cstdio>int F[50];
void FF(){F[1]=0;F[1]=1;for(int i=2;i<=45;i++){F[i]=F[i-1]+F[i-2];}
}int dfs(int n,int x){if(n<=2){return 1;}for(int i=x;i>=3;i--){if(n%F[i]==0){if(dfs(n/F[i],i)){return 1;}}}return 0;
}
int main(){int t;scanf("%d",&t);while(t--){FF();int n;scanf("%d",&n);if(dfs(n,45)==1){printf("Yes\n");}else{printf("No\n");}}return 0;
}