博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P1962]斐波那契数列
阅读量:5314 次
发布时间:2019-06-14

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

题目大意:求斐波那契数列第n项。第一项和第二项为1。

解题思路:矩阵快速幂模板题。

公式:

$$\begin{bmatrix} F[n] \\F[n-1] \end{bmatrix} \quad =\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} ^{n-2} \quad  × \begin{bmatrix} F[2] \\ F[1] \end{bmatrix} \quad$$

C++ Code:

#include
#include
using namespace std;struct mat{ long long a[2][2];};mat mul(mat x,mat y){ mat ans; memset(&ans,0,sizeof ans); for(int i=0;i<2;++i) for(int j=0;j<2;++j) for(int k=0;k<2;++k) ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j])%1000000007; return ans;}void pow(long long n){ mat p; p.a[0][0]=p.a[0][1]=p.a[1][0]=1; p.a[1][1]=0; mat ans; ans.a[0][0]=ans.a[1][1]=1; ans.a[0][1]=ans.a[1][0]=0; while(n){ if(n&1){ ans=mul(ans,p); } p=mul(p,p); n>>=1; } p.a[0][0]=p.a[1][0]=1; p.a[0][1]=p.a[1][1]=0; ans=mul(ans,p); printf("%d\n",(int)ans.a[0][0]);}int main(){ long long n; scanf("%lld",&n); if(n>2) pow(n-2);else puts("1"); return 0;}

 

转载于:https://www.cnblogs.com/Mrsrz/p/7612680.html

你可能感兴趣的文章
SQL入门经典(八)之存储过程
查看>>
Chrome/FireFox处理JSON的插件
查看>>
【转】ACM之Java新手速成
查看>>
日志分析工具 Log Parser
查看>>
18 HTML标签以及属性全
查看>>
vim 复制操作
查看>>
【codeforces 789C】Functions again
查看>>
【t067】补充装备
查看>>
【t060】可怜的波特
查看>>
解决Storm 和yarn 8080 端口冲突
查看>>
tensorflow 前向传播 2019.07.19
查看>>
MVP设计模式
查看>>
安装完CentOS 7 Minimal之后,从头打造桌面工作环境
查看>>
hadoop fs、hadoop dfs与hdfs dfs命令的区别
查看>>
学习转载:电源纹波测量的正确方法
查看>>
ajax删除,
查看>>
ZOJ 3469 Food Delivery(区间DP好题)
查看>>
3.20样式
查看>>
面向对象下
查看>>
Java关键字final、static使用总结 (final static在容器中不可以改变容器但可以改变存放)...
查看>>