hdoj 1568 Fibonacci (斐波那契数列通项公式+取对数)
来源:互联网 发布:不喝牛奶 知乎 编辑:程序博客网 时间:2024/04/30 14:07
Fibonacci
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4901 Accepted Submission(s): 2280
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说的是否正确。
(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
012345353637383940
Sample Output
011235922714932415390863241023
题目数据太大,显然不能直接递推公式,还有什么办法呢
除了递推公式,斐波那契数列还有一个通项公式:
运用对数运算求前几位的值。
转自:
我们知道了通项公式,题中要求结果大于4位的直接输出前4位,怎么才能求前四位呢? 我们要用到log取对数。
先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);
假设给出一个数10234432,
那么log10(10234432)=log10(1.0234432*10^7)【用科学记数法表示这个数】=log10(1.0234432)+7;
log10(1.0234432)就是log10(10234432)的小数部分.
log10(1.0234432)=0.010063744(取对数所产生的数一定是个小数)
再取一次幂:10^0.010063744=1.023443198
这样想取前四位只要用这个数乘以1000再取整就行了
对公式取对数:
最后一项很小 忽略不计。
代码:
#include <iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ int n,f[40]; f[0]=0; f[1]=1; for(int i=2;i<21;i++) { f[i]=f[i-1]+f[i-2]; } while(~scanf("%d",&n)) { if(n<21) printf("%d\n",f[n]); else { double ans=-0.5*log10(5.0)+n*log10((1+sqrt(5))/2); ans-=floor(ans);//取小数部分 ans=pow(10,ans);//指数运算 ans=ans*1000;//前四位取整 printf("%d\n",(int)ans); } } return 0;}
0 0
- hdoj 1568 Fibonacci (斐波那契数列通项公式+取对数)
- HDOJ 1568 Fibonacci(斐波那契通项公式+取对数)
- hdu 1568 Fibonacci 斐波那契通项公式求对数
- hdu 3117 Fibonacci Numbers 矩阵+斐波那契数列通项公式
- HDU1568-大数的Fibonacci(取对数技巧,通项公式)
- 20141001 【 高精度?/数论--斐波那契数列 】 hdoj 1568 Fibonacci
- 兔子对数---斐波那契数列
- HDU 1568 Fibonacci 公式求斐波那契数列
- 斐波那契数列通项公式的求法
- hdu1568(斐波那契数列通项公式)
- 斐波那契数列通项公式
- 斐波那契数列 通项公式 [数学]
- 斐波那契数列的通项公式
- 探究斐波那契数列的通项公式
- 推导斐波那契数列通项公式
- 斐波那契Fibonacci数列
- 斐波那契 (Fibonacci)数列
- Fibonacci(斐波那契)数列实现
- AdMob(app内嵌广告)插页广告
- 在页面显示Struts2提供的拦截器显示拦截成功的提示信息的步骤
- 对工厂模式与单例模式的理解
- cent os 5 u盘安装
- bzoj3631: [JLOI2014]松鼠的新家
- hdoj 1568 Fibonacci (斐波那契数列通项公式+取对数)
- Servlet的生命周期与工作原理
- 自建List<>绑定ComboBox下拉框实现省市联动
- 道德经 上篇:道经 第一章
- 十个免费专利检索分析网站
- Linux c==使用UDP实现网络通信(14)
- C++中的回调函数,函数指针理解
- Java发送邮件
- 嵌入式学习--work11 关于SPI的深入学习及软件模拟SPI(LCD调试所遇)