【Fibonacci】BestCoder #28B Fibonacci

Fibonacci

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 795    Accepted Submission(s): 213

Problem Description

Following is the recursive definition of Fibonacci sequence:

Fi=???01Fi−1+Fi−2i = 0i = 1i > 1

Fi=  0,       i = 0  1,       i = 1  Fi−1+Fi−2,  i > 1

Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.(一开始没理解题意,其实我觉得这题意也不大好=。 =,题解说是Fib乘积,但和为什么不行呢,路过的可以帮忙解答一下)

Input

There is a number T shows there are T test cases below. ( T < 100000 )
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

Note:

1、Fibonacci序列在1~1000000000范围内只有43个数。

2、判断一个数是几个数乘积的递归算法(掌握);

代码(看过题解):

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 using namespace std;
 6 const int maxn = 100;
 7 int f[maxn], tmp[maxn], j, k;
 8 void Fibonacci()
 9 {
10     f[0] = 0; f[1] = 1;
11     k = 2;
12     while(f[k-1] + f[k-2] <= 1000000000)
13     {
14         f[k] = f[k-1] + f[k-2];
15         k++;
16     }
17 }
18 bool Judge(int x, int step)//注意这里没有step的话会tle。。。
19 {
20     if(x == 1) return true;
21     for(int i = step; i < j; i++)
22     {
23         if(x%tmp[i] == 0)
24         {
25             if(Judge(x/tmp[i], i))
26                 return true;
27         }
28     }
29     return false;
30 }
31 int main()
32 {
33     Fibonacci();
34     int T;
35     scanf("%d", &T);
36     for(int i = 0; i < T; i++)
37     {
38         int n;
39         scanf("%d", &n);
40         if(!n) printf("Yes\n");
41         else
42         {
43             j = 0;
44             for(int i = 3; i < k; i++)
45             {
46                 if(n%f[i] == 0)
47                     tmp[j++] = f[i];
48             }
49             if(Judge(n, 0)) printf("Yes\n");
50             else printf("No\n");
51         }
52     }
53     return 0;
54 }

时间: 2024-11-05 14:45:31

【Fibonacci】BestCoder #28B Fibonacci的相关文章

【CF914G】Sum the Fibonacci 快速??变换模板

[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a|s_b) \& s_c \& (s_d $^$ s_e)=2^i$,i是某个整数3. $s_a \& s_b=0$ 求$\sum f(s_a|s_b) * f(s_c) * f(s_d $^$ s_e)$,f是斐波那契数列,对于所有合法的五元组(a,b,c,d,e).答案模$10^9

【BC】BestCoder Round#86小结

1001 [题意] 给定一个长度为n(n<=100000)的正整数序列,给出m(m<=100000)个子集合和的记录,问哪些一定比正确的记录多了 [题解] 对正整数序列求和,记录比和大的一定记录多了 HackPoint:sum要开long long int v[100005]; int main(){ int T=gi; while(T--){ int n,m;n=gi,m=gi;ll sum=0; FOR1(i,n)v[i]=gi,sum+=v[i]; FOR1(i,m){ ll p;sca

【CF446C】DZY Loves Fibonacci Numbers (线段树 + 斐波那契数列)

Description ? 看题戳我 给你一个序列,要求支持区间加斐波那契数列和区间求和.\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). Solution ? 先来考虑一段斐波那契数列如何快速求和,根据性质有 \[ \begin {align} fib_n &= fib_{n - 1} + fib_{n - 2} \ &= fib_ {n - 2} + fib_{n - 3} + fib_{n - 2} \ &= fib_{n -

【HDOJ】3509 Buge&#39;s Fibonacci Number Problem

快速矩阵幂,系数矩阵由多个二项分布组成.第1列是(0,(a+b)^k)第2列是(0,(a+b)^(k-1),0)第3列是(0,(a+b)^(k-2),0,0)以此类推. 1 /* 3509 */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #incl

矩阵十题【三】 HDU 1588 Gauss Fibonacci

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1588 题目大意:先要知道一组斐波那契数列 i 0 1 2 3 4 5 6 7 f(i) 0 1 1 2 3 5 8 13 下面给你一组数: k,b,n,M 现在知道一组公式g(i)=k*i+b:(i=0,1,2,3...n-1) 让你求出 f(g(i)) 的总和(i=01,2,3,...,n-1),比如给出的数据是2 1 4 100 2*0+1=1   f(1)=1 2*1+1=3   f(3)=2

hdoj 1250 Hat&#39;s Fibonacci 【高精度】

Fibonacci... 策略:用Java 做这道题较简单一些,但是,C语言是基础. 用java的话,就是最简单的BigInteger的使用. 下面简单讲一下C语言的做法: 一个12位的整数,可以表示为,3个四位的整数的集合,例如123412341234就可以转化为1234, 1234, 1234.下面的就是按照此原理做的. c代码: #include <stdio.h>//每一个int都代表6个数. #include <string.h> #define M 10000 int

矩阵十题【六】 poj3070 Fibonacci

题目链接:http://poj.org/problem?id=3070 题目大意:给定n和10000,求第n个Fibonacci数mod 10000 的值,n不超过2^31.结果保留四位数字. 很简单的题,和之前做过的相比简单很多了. 构造最简单的斐波那契数列矩阵. #include<iostream> #include<cstring> #include<stdio.h> using namespace std; const int MAX = 2; struct M

hduoj 1848 Fibonacci again and again【sg函数】【博弈】【菲波那切数列】

Fibonacci again and again Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1,2,3,5,8,13--就是菲波那契数列. 在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题. 今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下: 1.  这是

HDU1250_Hat&#39;s Fibonacci【大数】【水题】

Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7854    Accepted Submission(s): 2551 Problem Description A Fibonacci sequence is calculated by adding the previous two members th