博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
阅读量:6230 次
发布时间:2019-06-21

本文共 1870 字,大约阅读时间需要 6 分钟。

斐波那契数列后四位可以用快速幂取模(模10000)算出。前四位要用公式推

f(n)=(((1+√5)/2)^n+((1-√5)/2)^n)/√5

假设F[n]可以表示成 t * 10^k(t是一个小数),那么对于F[n]取对数log10,答案就为log10 t + K,此时很明显log10 t<1,于是我们去除整数部分,就得到了log10

再用pow(10,log10 t)我们就还原回了t。将t×1000就得到了F[n]的前四位。 具体实现的时候Log10 F[n]约等于((1+√5)/2)^n/√5,这里我们把((1-√5)/2)^n这一项忽略了,

因为当N>=40时,这个数已经小的可以忽略。于是log10 F[n]就可以化简成log10 1/√5 + n*log10 (1+√5)/2

#include 
#include
#include
#include
#include
using namespace std;const int Mod = 10000;const int N = 4;int msize;struct Mat{ int mat[N][N];};Mat operator *(Mat a, Mat b){ Mat c; memset(c.mat, 0, sizeof(c.mat)); for(int k = 0; k < msize; ++k) for(int i = 0; i < msize; ++i) if(a.mat[i][k]) for(int j = 0; j < msize; ++j) if(b.mat[k][j]) c.mat[i][j] = (c.mat[i][j] +a.mat[i][k] * b.mat[k][j])%Mod; return c;}Mat operator ^(Mat a, int k){ Mat c; memset(c.mat,0,sizeof(c.mat)); for(int i = 0; i < msize; ++i) c.mat[i][i]=1; for(; k; k >>= 1) { if(k&1) c = c*a; a = a*a; } return c;}int a[50];const double sq5 = sqrt(5.0);int main(){// freopen("in.txt","r",stdin); int n; msize = 2; Mat A; A.mat[0][0] = 1; A.mat[0][1] = 1; A.mat[1][0] = 1; A.mat[1][1] = 0; a[0] = 0; a[1] = 1; for(int i=2;i<40;i++) a[i] = a[i-1] + a[i-2]; while(~scanf("%d", &n)) { if(n<40) printf("%d\n",a[n]); else { double t = n * log10((1.0 + sq5) / 2) - log10(sq5); t -= (int)t; t = pow(10.0, t); printf("%d...",(int)(t * 1000)); Mat aa = A; aa = aa ^ (n-1); printf("%04d\n",aa.mat[0][0]); } } return 0;}

 

转载于:https://www.cnblogs.com/pach/p/7231061.html

你可能感兴趣的文章
js事件冒泡和传播详细解释
查看>>
笔试题
查看>>
[番外篇]k位精巧数
查看>>
Spring Security实战 - 短信登录
查看>>
(九)企业级java springcloud b2bc商城系统开源源码二次开发:配置中心和消息总线(配置中心终结版)...
查看>>
Redis 数据采样
查看>>
ELK搭建以及使用大全
查看>>
本地HOSTS测试管理工具
查看>>
httpwatch使用技巧
查看>>
视图的with check option解释
查看>>
我的友情链接
查看>>
安装nginx+tomcat
查看>>
Android配置环境与引入第三方jar包
查看>>
我的友情链接
查看>>
iOS中UIWebView与其中网页的javascript的交互
查看>>
For语句实现批量创建AD用户
查看>>
MAC与LINUX之间的文件通信
查看>>
【MyBatis框架】SqlMapConfigl配置文件之常用的setting设置
查看>>
条件编译
查看>>
京东金融大数据竞赛猪脸识别(1)-从视频提取图像
查看>>