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.
F
i
=⎧
⎩
⎨
0
1
F
i−1
+F
i−2![]()
![]()
i = 0
i = 1
i > 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;
}