首页 > 代码库 > hdu 5167 Fibonacci(DFS)
hdu 5167 Fibonacci(DFS)
hdu 5167 Fibonacci
问题描述
斐波那契数列的递归定义如下:现在我们需要判断一个数是否能表示为斐波那契数列中的数的乘积。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; }
hdu 5167 Fibonacci(DFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。