Fibonacci

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3721    Accepted Submission(s): 1710

Problem 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
Author
daringQQ
Source
Happy 2007
题目大意:求取给定序位的斐波那契数的前四位
题目分析:
求取斐波那契有三种方法,线性递推,矩阵快速幂,和通项公式;
因为要求的是前四位,所以快速幂没办法做到
而数据量又直接导致线性不能达到,那么只能利用通项公式求取
但是直接记录的话会超各种,甚至高精度
所以我们要利用对数的性质,取单纯记录位上的数字
也就是对f(n)取对数,那么小数部分便能完全记录需要的位数
只需要取到前四位即可,所以乘以1000即可,预处理前20位打表特判

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>using namespace std;double get ( int n )
{return n*log10((1.0+sqrt(5.0))/2.0) - 0.5*log10(5.0);
}int n;
int f[20];int main ( )
{f[0] = 0 , f[1] = f[2] = 1;for ( int i = 3 ; i <= 20 ; i++ )f[i] = f[i-1] + f[i-2];while ( ~scanf ( "%d" , &n ) ){if ( n <= 20 )printf ( "%d\n" , f[n] );else{double ans = get ( n );ans -= floor ( ans );ans = pow ( 10 , ans );printf ( "%d\n" , (int)(ans*1000) );}}
}

hdu 1568 Fibonacci(fibonacci通项+对数性质)相关推荐

  1. 【HDU -1568】 Fibonacci(斐波那契通项公式+取对数)

    Fibonacci Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1] ...

  2. 斐波那契数列大数的压位c语言,HDU 1568 Fibonacci(大数前4位)

    分析:x=1234567.求其前四位数: log10(x)=log10(1.234567)+6. 所以1.234567=10^(log10(x)-6). 1234 =(int) 10^(log10(x ...

  3. hdu 1568 Fibonacci 对数。。

    先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c); 假设给出一个数10234432,那么log10(10234432)=log10(1.023 ...

  4. HDU 1568 Fibonacci【求斐波那契数的前4位/递推式】

    Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Proble ...

  5. HDU - 1568 Fibonacci (斐波那契,大数取前几位

    2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>= ...

  6. HDU 1568 Fibonacci

    题目链接 Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i ...

  7. HDU 1568 Fibonacci ★(取科学计数法)

    题目大意:问fibonacci数列的第n项的前四个数.   很好的一道题~~~如果取后几位的话,取模就可以了,但取前几位显然没这么简单= =-- 但假如我们能把它表示成小数(科学计数法)的话,那么要取 ...

  8. hdu 1568 (log取对数 / Fib数通项公式)

    2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>= ...

  9. 【HDU - 4786 】Fibonacci Tree (最小生成树变形,上下界贪心,tricks)

    题干: Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some research on ...

最新文章

  1. 前端npm 安装包,精选大全集合
  2. 页面导航的两种方式——声明式导航、编程式导航||vue-router编程式导航||router.push() 方法的参数规则
  3. window.print只打印了1页的原因
  4. 字符数据类型转换代码
  5. 【TensorFlow】实现、训练并评估简单的回归模型和分类模型
  6. 利用Cydia Substrate进行Android HOOK(二)
  7. Beyond Compare 怎么新增与卸载文件格式
  8. python更改端口
  9. Tableau可视化学习笔记:day05-06
  10. java字母大小写转换
  11. 上云避坑指南100篇|ERP上云一时爽,遇坑泪两行
  12. Cisco Packet Tracer 8.0 发布,百度网盘下载
  13. 虚拟机网络与物理机网络互通
  14. 函数逼近和曲线拟合、插值
  15. 主键的特点和三种创建方式
  16. 调用系统相机和相册出现闪退报错No Activity found to handle Intent
  17. 字符格式(gbk utf8等)
  18. 坐标转换:将imu坐标系下的角速度、线速度转换到车体坐标系,参考Autoware
  19. w ndows7旗舰版怎么重装系统,windows7旗舰版安装包下载到手机的操作方法步骤教程 - 系统家园...
  20. 第三章 View的基本概念

热门文章

  1. 【Go学习笔记】数据类型之切片(slice)
  2. Spring MVC分析篇——HandleMapping
  3. 和积法用MATLAB怎么做,权重确定方法归纳解读
  4. 通过实例学习Pytorch加载权重.load_state_dict()与保存权重.save()
  5. [台剧]《倚天屠龙记》永远的经典——孙兴版杨逍
  6. 【linux】在linux上生成SSH-key 简单原理介绍+生成步骤
  7. Junit - 忽略测试(Ignore Test)
  8. 《Java语言程序设计与数据结构》编程练习答案(第四章)(二)
  9. 关于编程学习的心态与方法
  10. Python读写文件的推荐写法-try-open