斐波那契数列的递归定义如下:现在我们需要判断一个数是否能表示为斐波那契数列中的数的乘积。Fi=???01Fi?1+Fi?2i = 0i = 1i > 1
有多组数据,第一行为数据组数T (T≤100,000 )。 对于每组数据有一个整数n ,表示要判断的数字。0≤n≤1,000,000,000
对于每组数据,如果可以输出“Yes”,否则输出"No"。
3 4 17 233
Yes No Yes
题目大意:中文题目。
#include<stdio.h> #include<math.h> #include<string.h> long long fib[50], ans[50]; int num, flag, sum, cnt; int DFS(int n, int p) { if (n == 1) { flag = 1; return 1; } for (int i = p; i < cnt; i++) { if (n % ans[i] == 0 && DFS(n / ans[i], i)) { flag = 1; return 1; } } return 0; } int main() { fib[0] = 0; fib[1] = 1; for (int i = 2; i < 46; i++) { fib[i] = fib[i - 1] + fib[i - 2]; } int T; scanf("%d", &T); while (T--) { scanf("%d", &num); flag = cnt = 0; if (num == 0) { printf("Yes\n"); continue; } for (int i = 3; fib[i] <= num; i++) { if (num == fib[i]) { flag = 1; break; } if (num % fib[i] == 0) { ans[cnt++] = fib[i]; } } if (!flag) DFS(num, 0); if (flag) printf("Yes\n"); else printf("No\n"); } return 0; }
原文地址:http://blog.csdn.net/llx523113241/article/details/43411549