当前位置: 首页 > news >正文

HDU 1568 Fibonacci

先看对数的性质,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);
最后取其小数部分。


  
#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 ; }

相关文章:

  • Hadoop2.6.0单机伪分布式安装
  • jquery获取表单值的利器:serialize()
  • COGS.264.数列操作(分块 单点加 区间求和)
  • HDU 2196 Computer 经典树形DP
  • 【python】-字典的使用
  • Android Development Tools for Eclipse.pdf
  • 推荐引擎算法学习导论
  • 使用 RAID 与 LVM 磁盘阵列技术
  • C#脚本实践(六): 脚本相对于C++的优势
  • 二维数组作为函数参数传递剖析(转载)
  • 基于贝叶斯平均的产品排序方法
  • Oracle Database Instant Client即时客户端配置使用
  • XML技术
  • 非正常关闭数据库服务的不同告警信息的表现的测试
  • 小甲鱼OD学习第10讲
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【翻译】babel对TC39装饰器草案的实现
  • canvas 绘制双线技巧
  • JavaScript设计模式系列一:工厂模式
  • JSDuck 与 AngularJS 融合技巧
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • leetcode讲解--894. All Possible Full Binary Trees
  • nodejs实现webservice问题总结
  • php面试题 汇集2
  • ubuntu 下nginx安装 并支持https协议
  • 第十八天-企业应用架构模式-基本模式
  • 基于axios的vue插件,让http请求更简单
  • 基于HAProxy的高性能缓存服务器nuster
  • 基于webpack 的 vue 多页架构
  • 简析gRPC client 连接管理
  • 强力优化Rancher k8s中国区的使用体验
  • 手写双向链表LinkedList的几个常用功能
  • 数组的操作
  • 写代码的正确姿势
  • 《天龙八部3D》Unity技术方案揭秘
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ${ }的特别功能
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (第61天)多租户架构(CDB/PDB)
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm高校实验室 毕业设计 800008
  • (南京观海微电子)——I3C协议介绍
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十一)c52学习之旅-动态数码管
  • (五)网络优化与超参数选择--九五小庞
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net core 6 集成 elasticsearch 并 使用分词器
  • /var/lib/dpkg/lock 锁定问题
  • []串口通信 零星笔记
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [Android] Upload package to device fails #2720
  • [C++]priority_queue的介绍及模拟实现
  • [C++]unordered系列关联式容器
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法