我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法:

二阶递推:f(n+2)=(1 1) f(n+1)

f(n+1)  (1 0)   f(n)

上面等式两边分别是矩阵,那么矩阵A就是等式右边第一个式子。

只要求出A的n次,就可以求出f(n)。我们使用快速幂来求,这个算法的复杂度为O(logn)

#include <iostream>
#include <cstddef>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
const int mod=10000;
typedef vector<ll> vec;
typedef vector<vec> mat;
mat mul(mat &a,mat &b){mat c(a.size(),vec(b[0].size()));for(int i=0;i<2;i++){for(int j=0;j<2;j++){for(int k=0;k<2;k++){c[i][j]+=a[i][k]*b[k][j];//c[i][j]%=mod;}}}return c;
}
mat pow(mat a,ll n){mat res(a.size(),vec(a.size()));for(int i=0;i<a.size();i++)res[i][i]=1;while(n>0){if(n&1){res=mul(res,a);n-=1;}else{a=mul(a,a);n/=2;}}return res;
}
ll solve(ll n){mat a(2,vec(2));a[0][0]=1;a[0][1]=1;a[1][0]=1;a[1][1]=0;a=pow(a,n);return a[1][0];
}int main(){ll n;while(cin>>n){cout<<solve(n)<<endl;}return 0;
} 

利用矩阵快速幂求斐波那契数列相关推荐

  1. 矩阵快速幂求斐波那契数列(初学整理)

    参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...

  2. 2017.3.25 矩阵快速幂 求斐波那契数列第n项

    对于矩阵快速幂只要知道矩阵取模.乘法原理就完全可以手推 口诀:行 列         被计算的行列的交点是结果对应的位置: 剩下的就是推矩阵: 其实根据矩阵的方程意义就很好推了: 码: #includ ...

  3. 矩阵快速幂及斐波那契数列模板

    本篇博客先给出矩阵快速幂以及利用矩阵快速幂求斐波那契数列的模板,讲解待更新-- const int N=10; int tmp[N][N]; void multi(int a[][N],int b[] ...

  4. A - 【深蓝】教科书般的亵渎 (Gym - 102072A )(矩阵快速幂+计算斐波那契数列)

    "现在给大家展示一波教科书般的亵渎" "扭了扭了" 炉石传说是一款比较火的卡牌游戏,不同的卡牌间可以打出许多不可思议的配合. 炉石传说的战斗大部分由随从来完成. ...

  5. ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】

    描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...

  6. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)

    链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. 矩阵快速幂及斐波那契数列

    1.通用模板:矩阵快速幂 前几天写过一篇矩阵快速幂的一种解法,但是当时只是初学,所以用了当时我更好理解的方法去做.那个解法需要调用两个很相像的函数,而且容易造成紊乱,也不利于矩阵快速幂的推广,所以在观 ...

  8. 快速幂求解斐波那契数列

    斐波那契数列 斐波那契数列是很经典也很简单的一条题目.其满足: F n = { 1 ( n ≤ 2 ) F n − 1 + F n − 2 ( n ≥ 3 ) F_{n}= \begin{cases} ...

  9. 利用线性代数的方法求斐波那契数列的通项

    由于word编辑的公式打出来全是黑的,所以只能贴图咯.下次换个编辑器. 转载于:https://www.cnblogs.com/maplewizard/archive/2013/03/10/29526 ...

最新文章

  1. 08常用的模板标签和过滤器
  2. linux下apache和jboss集群和负载均衡
  3. sunPKCS11加载动态库(转)
  4. 我已经写了48年代码了,我感觉我还能写下去
  5. ADOMD.net概述
  6. 论文阅读-目标检测(2019)-CenterNet:目标检测转化为关键点检测及其属性回归
  7. springboot底层原理简述
  8. 萤石云设备接入操作说明
  9. excel两个字符串相减_Excel小技巧|三种方法计算算式字符串
  10. 单片机和嵌入式哪个值得学?
  11. 计算机小高考要点,小高考的复习计划
  12. 央行二代征信系统即将上线 有哪些变化?
  13. java tld tag_自定义标签tag(jsp编写)和tld(java编写)的使用方法
  14. 投稿动态无法删除的情况下,如何批量删除B站动态?
  15. Kotin 的代理和委托
  16. 100 个网络基础知识,全部掌握顶半个网络高手
  17. 一个tomcat服务单独控制多个项目启停
  18. 如何将自己的网页上传让别人都可以搜索到,如何建站
  19. 抖音电商主播运营技巧话术脚本策划方案带货流程计划表格
  20. 统计学习方法04-16 PCA

热门文章

  1. 008_CSS属性选择器
  2. mips 内存 linux,MIPS 在linux中的内存映射
  3. android 命令启动服务,adb 命令
  4. python anova_anova_lm()python:它适用于哪种模型类型?
  5. Android最佳性能实践(一):合理管理内存
  6. php查询每个小时的数据,php – MySQL显示表中每小时的条目数
  7. java获取小数位数_Java获取小数位数
  8. 计算机网络多媒体图像矢量图,13多媒体信息处理——图像处理(一)
  9. app 注册防刷 php,手机验证码设计和防刷制度
  10. WPF 加载等待动画