fibonacci封闭公式

Description

2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 
(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。 
接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验zouyu说的是否正确。

Input

输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾。

Output

输出f[n]的前4个数字(若不足4个数字,就全部输出)。

Sample Input

0
1
2
3
4
5
35
36
37
38
39
40

Sample Output

0
1
1
2
3
5
9227
1493
2415
3908
6324
1023

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main()
{
    int i,n,a[22],len;
    double s,d;
    a[0]=0;a[1]=1;
    for(i=2;i<22;i++)
    a[i]=a[i-1]+a[i-2];
    while(scanf("%d",&n)!=EOF)
    {
        if(n<21)
        printf("%d\n",a[n]);
        else
        {
            s=log10(1.0/sqrt(5))+n*log10((1+sqrt(5))/2.0);
            len=(int)s;
            d=s+3-len;
           printf("%d\n",(int)pow(10,d));
        }
    }
    return 0;
}
时间: 2024-10-15 23:10:07

fibonacci封闭公式的相关文章

fibonacci封闭公式及矩阵连乘

Description The Fibonacci sequence is the sequence of numbers such that every element is equal to the sum of the two previous elements, except for the first two elements f0 and f1 which are respectively zero and one. What is the numerical value of th

fibonacci卷积公式的使用

Fibonacci数列的定义如下: f(n) = f(n - 1) + f(n - 2) (n >= 3) f(1) = 1, f(2) = 2 f(0)可定义为1. 用归纳法可以证明性质: f(n + m) = f(m - 1)f(n + 1) + f(m - 2)f(n)  (m>= 2) 利用这条性质,我们可以将比较大的n的Fibonacci数转化成比较小的Fibonacci数,从而使计算起来更为方便. 这里有一个问题: Fibonacii数列 Fn (mod k) 的循环节长度是多少?

hdu 3117 Fibonacci Numbers

点击此处即可传送到hdu 3117 **Fibonacci Numbers** Problem Description The Fibonacci sequence is the sequence of numbers such that every element is equal to the sum of the two previous elements, except for the first two elements f0 and f1 which are respectively

hdu 1568(Fibonacci)(就是大数的斐波那契公式)

Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3569    Accepted Submission(s): 1627 Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i]

Codeforces 446C 线段树 递推Fibonacci公式

聪哥推荐的题目 区间修改和区间查询,但是此题新颖之处就在于他的区间修改不是个定值,而是从L 到 R 分别加 F1.F2....Fr-l+1 (F为斐波那契数列) 想了一下之后,觉得用fib的前缀和来解决,每次做懒惰标记记录下当前区间是从哪个L开始加起的,敲了一半之后发现有问题,就跟上次遇到的懒惰标记问题一样,这是个覆盖性的懒惰标记,每次向下传递后,都要先清除孩子的,清除孩子的也有可能要清除son's son,所以要一直pushdown下去,否则就会错,但这样就会超时. 能不能有个累加型的标记让我

Codeforces 717A Festival Organization(组合数学:斯特林数+Fibonacci数列+推公式)

Codeforces 717A Festival Organization(组合数学:斯特林数+Fibonacci数列+推公式) 牛逼题.....推公式非常的爽...虽然我是看了别人的博客才推出来的... 0.1 斯特林数 下面要用到的是带符号的第一类斯特林数. \(x^{n\downarrow}=\prod_{i=0}^{n-1}(x-i)=\sum_{k=0}^ns(n,k)x^k\) 有递推公式\(s(n,m)=s(n-1,m-1)-(n-1)*s(n-1,m)\) 0.2 斐波那契数列的

hdu 3054 Fibonacci 找循环节的公式题

Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Problem Description We know the Fibonacci Sequence F1=1,F2=1,F3=2,F4=3,F5=5, ... Fx = Fx-1+Fx-2 We want to know the Mth number which has K consecutive "0&qu

HDU 3117 Fibonacci Numbers(矩阵快速幂+公式)

题目地址:HDU 3117 对于后四位可以用矩阵快速幂快速求出来,但前四位就没办法了.要知道斐波那契数列是有通项公式的,所以只能通过通项公式来求前四位,但公式不能求后四位,因为公式使用浮点数求的,精度显然不够,求前四位要用到对数. 通项公式为: f(n)=1/sqrt(5)(((1+sqrt(5))/2)^n+((1-sqrt(5))/2)^n) 假设F[n]可以表示成 t * 10^k(t是一个小数),那么对于F[n]取对数log10,答案就为log10 t + K,此时很明显log10 t<

HDU 3117 Fibonacci Numbers(Fibonacci矩阵加速递推+公式)

题目意思很简单:求第n个Fibonacci数,如果超过八位输出前四位和后四位中间输出...,否则直接输出Fibonacci数是多少. 后四位很好求,直接矩阵加速递推对10000取余的结果就是. 前四位搜了一下:http://blog.csdn.net/xieqinghuang/article/details/7789908 Fibonacci的通项公式,对,fibonacci数是有通项公式的-- f(n)=1/sqrt(5)(((1+sqrt(5))/2)^n+((1-sqrt(5))/2)^n