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

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

求斐波那契第n项。

[f(n-1) f(n)] *  [0,1] = [f(n) f(n+1)]                 [1,1]

由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可。

快速幂本质和普通快速幂一模一样,只是乘法操作换成了矩阵的乘法,可以重载。

//Stay foolish,stay hungry,stay young,stay simple#include
#include
using namespace std;const int MOD=1000000007;typedef long long ll;ll n;struct Mat{ ll data[3][3]; Mat(){ memset(data,0,sizeof(data)); }};Mat mut(Mat x,Mat y){ Mat ret; for(int i=1;i<=2;i++){ for(int j=1;j<=2;j++){ for(int k=1;k<=2;k++){ ret.data[i][j]=(ret.data[i][j]+(x.data[i][k]*y.data[k][j])%MOD)%MOD; } } } return ret;}Mat Mpow(Mat x,ll t){ Mat ret; ret.data[1][1]=ret.data[2][2]=1; while(t){ if(t&1) ret=mut(x,ret); x=mut(x,x); t>>=1; } return ret;}int main(){ cin>>n; Mat o; o.data[1][1]=o.data[1][2]=o.data[2][1]=1; o=Mpow(o,n); cout<

转载于:https://www.cnblogs.com/ghostcai/p/9247444.html

你可能感兴趣的文章
JavaScript高级程序设计(5) 引用类型 (上)
查看>>
QT学习-10/31/2012
查看>>
python学习交流 - 匿名函数
查看>>
文章1(转)
查看>>
schedule调用相关整理
查看>>
node.js-session问题
查看>>
拦截器和过滤器的区别 -- 简单分析篇
查看>>
Python版本微信跳一跳,软件配置
查看>>
PropertyGrid仿VS的属性事件窗口
查看>>
ahjesus自定义隐式转换和显示转换
查看>>
@PathVariable、@RequestHeader与@CookieValue注解的使用案例
查看>>
【笔记】jquery判断两个日期之间相差多少天
查看>>
PYTHON1.day01
查看>>
CSS 定位 (Positioning) 实例
查看>>
css怎么写链接到图片和地址
查看>>
js--小结⑥---typeof
查看>>
从别的网站摘抄的,挺有用的
查看>>
更改一个主键的列的类型的步骤
查看>>
neo4j 如何删除所以的节点和关系
查看>>
Markdown的常用使用语法
查看>>