求斐波那契第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<iostream>
#include<cstring>
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<<o.data[1][2];
return 0;
}

[LUOGU] P1962 斐波那契数列的更多相关文章

  1. Luogu P1962 斐波那契数列(矩阵乘法模板)

    传送门(其实就是求斐波那契数列....) 累了 明天再解释 做这道题需要一些关于矩阵乘法的基础知识. 1. 矩阵乘法的基础运算 只有当矩阵A的列数等于矩阵B的行数时,A与B可以相乘(A的行数不一定等于 ...

  2. [luogu P1962] 斐波那契数列(带快速幂矩阵乘法模板)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...

  3. 【luogu P1962 斐波那契数列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1962 给你篇dalao的blog自己看吧,把矩阵快速幂的板子一改就OK #include <algor ...

  4. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  5. Luogu 1962 斐波那契数列(矩阵,递推)

    Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...

  6. 洛谷P1962 斐波那契数列【矩阵运算】

    洛谷P1962 斐波那契数列[矩阵运算] 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) ( ...

  7. 洛谷——P1962 斐波那契数列

    P1962 斐波那契数列 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 ...

  8. P1962 斐波那契数列 【矩阵快速幂】

    一.题目 P1962 斐波那契数列 二.分析 比较基础的递推式转换为矩阵递推,这里因为$n$会超出$int$类型,所以需要用矩阵快速幂加快递推. 三.AC代码 1 #include <bits/ ...

  9. 洛谷—— P1962 斐波那契数列

    https://www.luogu.org/problem/show?pid=1962 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f ...

随机推荐

  1. PhpStorm之设置字体大小

    1.点击左上角的File,再点击setting:(Ctrl+Alt+S) 2.进入 Editor  /  General,选择 Change font size (Zoom) with Ctrl+Mo ...

  2. POJ3258【二分】

    题意: 问一个河岸,两岸之间有笔直的n块石头,然后拔起(也可以施展魔法)m个石块,假设两岸也是石块,求处理过的石块的最小距离的最大. 思路: 他让我们求移开m个石块,无非是在n+2-m(已经把两岸看成 ...

  3. touch的基本用法

    touch的基本功能是改变文件的时间戳,以下是三种常用用法: 1.创建一个空文件 以当前时间为时间戳创建一个空文件.$ touch touch.txt //touch.txt不存在 2.更改文件时间戳 ...

  4. Codeforces Round #513解题报告(A~E)By cellur925

    我是比赛地址 A:Phone Numbers $Description$:给你一串数字,问你能组成多少开头为8的11位电话号码. $Sol$:统计8的数量,与$n$%11作比较. #include&l ...

  5. 弹射起步~django

    sudo apt-get installl tree 开始创建工作目录 django-admin.py startproject mysite 创建一个名为 mysite的子目录,然后我们通过tree ...

  6. POJ 1177 Picture(线段树 扫描线 离散化 求矩形并面积)

    题目原网址:http://poj.org/problem?id=1177 题目中文翻译: 解题思路: 总体思路: 1.沿X轴离散化建树 2.按Y值从小到大排序平行与X轴的边,然后顺序处理 如果遇到矩形 ...

  7. Spring Cache无效的问题以及解决办法

    http://blog.csdn.net/kimylrong/article/details/50126979 @Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接 ...

  8. `<img>`放到`<div>`中底部出现空隙 以及解放方案.

    形成情况: 外部的 不设置宽高, 由内部图片撑开 撑开后, 底部会有空隙 问题原因: div元素中的行内元素的默认vertical-align对齐方式是基线baseline img是行内元素, 所以会 ...

  9. RHEL 6.5---SVN服务实现过程

    主机名 IP地址  master 192.168.30.130 slave 192.168.30.131 安装 [root@master ~]# yum install -y subversion h ...

  10. PHP连接数据操作步骤

    数据库的操作步骤: 端口号:0到65535 3306:mysql数据库的默认端口号(可修改) mysql_connect(“本机地址”,“用户名”,“密码”,); new_link:如果用同样的参数第 ...