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个数字,就全部输出)。

  刚开始看到这么大的数据,于智商有限的我,表示无能为力,于是YY数论的东西,最后以无结果告终- -!

  后搜到AC的博客中一篇此题的详细剖析过程,顿时对核武的膜拜又升了一个档次.......

  要点:

    1. log取对数的运用

    2. Fib数的通项公式

  以下摘自AC博客:http://hi.baidu.com/aekdycoin/blog/item/60bbae2b38c6f52ad42af18f.html

先看对数的性质,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
那么要取几位就很明显了吧~
先取对数(对10取),然后得到结果的小数部分bit,pow(10.0,bit)以后如果答案还是<1000那么就一直乘10。
注意偶先处理了0~20项是为了方便处理~

这题要利用到数列的公式:an=(1/√5) * [((1+√5)/2)^n-((1-√5)/2)^n](n=1,2,3.....)

取完对数

log10(an)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0)+log10(1-((1-√5)/(1+√5))^n)其中f=(sqrt(5.0)+1.0)/2.0;
log10(1-((1-√5)/(1+√5))^n)->0
所以可以写成log10(an)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0);
最后取其小数部分。

AC核武代码

#include<iostream>
#include<cmath>
using namespace std;
int fac[21]={0,1,1};
const double f=(sqrt(5.0)+1.0)/2.0;
int main()
{
double bit;
int n,i;
for(i=3;i<=20;i++)fac[i]=fac[i-1]+fac[i-2];//求前20项
while(cin>>n)
{
if(n<=20)
{
cout<<fac[n]<<endl;
continue;
}
bit=-0.5*log(5.0)/log(10.0)+((double)n)*log(f)/log(10.0);//忽略最后一项无穷小
bit=bit-floor(bit);
bit=pow(10.0,bit);
while(bit<1000)bit=bit*10.0;
printf("%d\n",(int)bit);
}
return 0;
}

转载于:https://www.cnblogs.com/cykun/archive/2011/04/20/2022368.html

hdu 1568 (log取对数 / Fib数通项公式)相关推荐

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

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

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

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

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

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

  4. hdu 1568 Fibonacci(fibonacci通项+对数性质)

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

  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 对数。。

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

  7. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

    HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和 ...

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

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

  9. Fib数模n的循环节

    我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...

最新文章

  1. 彻底搞懂 Nginx 的五大应用场景
  2. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  3. 树莓派python实例_树莓派3 搭建 django 服务器的实例
  4. 【bzoj2242】[SDOI2011]计算器 EXgcd+BSGS
  5. element ui走马灯怎么添加_Lovestu - Element UI 走马灯高度自适应
  6. Citrix XenServer XenCenter 警报
  7. Dotnet Core多版本API共存的优雅实现
  8. mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量
  9. factory service provide自定义服务
  10. 启动转换安装失败 拷贝windows安装文件时出错_在Ubuntu16.04下安装MATLAB2017b
  11. 设计模式(4)—— 简单工厂模式(Simple Factory,创建型)
  12. 虚拟机卡在登录界面卡住了_手机都10核了 为何还是照样卡?
  13. 【GIS免费精品课程笔记】1 传统数据处理VS大数据处理思维
  14. 谷歌地球大陆版如何下载和使用,查看谷歌历史影像3D建筑街景等
  15. 遗传算法原理和优缺点
  16. 收藏、退出一气呵成,2019年机器之心干货教程都在这里了
  17. Emacs键盘练习方法
  18. 【VTM10.0】量化之RDOQ技术
  19. 车架号 生成 java_车辆识别码VIN校验位计算方法及实现  VIN号检验、车架号检验 java、 C++...
  20. 织梦dedecms模板安装过程的那点事儿

热门文章

  1. fpga电平约束有什么作用_FPGA从串模式
  2. 【错误记录】Android 中使用 Kotlin 为 EditText 组件设置文本报错 ( Type mismatch. Required:Editable. Found:String )
  3. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
  4. 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )
  5. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
  6. 【计算理论】计算复杂性 ( coNP 问题 | coNP 完全 | P、NP、coNP 相互关系 )
  7. 【错误记录】Android 应用连接 BLE 设备无法读取数据 ( 可以写出数据 | 无法读取数据 )
  8. 【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )
  9. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
  10. 阅读微信支付demo收获