zoukankan      html  css  js  c++  java
  • NYOJ 461

    Fibonacci数列(四)

    描述
     数学神童小明终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。
    接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位(高4位)就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验小明说的是否正确。
    输入
    输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾结束。
    输出
    输出f[n]的前4个数字(若不足4个数字,就全部输出)。
    样例输入
    0
    1
    2
    3
    4
    5
    35
    36
    37
    38
    39
    40
    
    样例输出
    0
    1
    1
    2
    3
    5
    9227
    1493
    2415
    3908
    6324
    1023

    这道题首先考虑如何产生前4位: 

    先看对数的性质,logabc=c*logab ,loga(b*c)=logab+logac;假设给出一个数10234432,
    那么log10(10234432)=log10(1.0234432*107)【用科学记数法表示这个数】=log10(1.0234432)+7;
    log10(1.0234432)就是log10(10234432)的小数部分.
    log10(1.0234432)=0.010063744(取对数所产生的数一定是个小数)
    再取一次幂:10^0.010063744=1.023443198,然后减去整数部分,剩下的就是小数部分,让取前4位,只需要将小数部分*1000就好了。

    然后根据数学知识,有斐波那契数列的通项公式:

    当然,这样是不够的,需要进一步加工。

    log10f(n)=n*log10((1+√5)/2)-log10√5+log10(1-((1-√5)/(1+√5))n)  红色的部分随着n的增大快速的就趋近余0,是高阶无穷小. 可以忽略。

    所以:log10f(n) ≈n*log10((1+√5)/2)-log10√5

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cmath>
     4 using namespace std;
     5 int main(){
     6     int n,i,a[25];
     7     double x,y,z,d;
     8     a[0]=0;
     9     a[1]=1;
    10     for(i=0;i<19;i++)
    11         a[i+2]=a[i+1]+a[i];
    12 
    13     while(scanf("%d",&n)!=EOF){
    14         if(n<=20)
    15             cout<<a[n]<<endl;
    16         else{
    17             x=( log( ( 1.0+sqrt(5.0) ) /2.0 ) / log(10.0) )*n;
    18             y=( 0.5*log( 5.0 ) )/log(10.0);    
    19             z=(x-y)-floor(x-y);                  //得到log f(n)的小数部分 
    20             d=1000*pow(10.0,z );                     
    21             cout<<floor(d)<<endl;                 //取整数 
    22 
    23         }
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/liugl7/p/5392861.html
Copyright © 2011-2022 走看看