2017.3.25 矩阵快速幂 求斐波那契数列第n项
对于矩阵快速幂只要知道矩阵取模、乘法原理就完全可以手推
口诀:行 列 被计算的行列的交点是结果对应的位置:
剩下的就是推矩阵:
其实根据矩阵的方程意义就很好推了:
码:
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
struct juzhen
{ll hang,lie;ll jz[3][3];juzhen(){jz[0][0]=jz[0][1]=jz[1][1]=jz[1][2]=jz[2][1]=jz[1][0]=jz[2][2]=0;hang=0,lie=0; }
};
ll i,j,k;
int n,p=999;
juzhen jzcheng(juzhen a,juzhen b)
{ juzhen ans;ans.hang=a.hang;ans.lie=b.lie;for(int i=1;i<=ans.hang;i++){for(int j=1;j<=ans.lie;j++){for(int k=1;k<=ans.lie;k++){ans.jz[i][j]=(ans.jz[i][j]+(a.jz[i][k]*b.jz[k][j])%p)%p;} } } return ans;
}
void cheng(juzhen a,int b)
{for(int i=1;i<=a.hang;i++)for(int j=1;j<=a.lie;j++){a.jz[i][j]=(a.jz[i][j]*b)%p; }
}juzhen jzkuai(juzhen a,int b)
{juzhen ans;ans.hang=a.hang;ans.lie=a.lie;ans.jz[2][2]=1;ans.jz[1][1]=1;ans.jz[1][2]=ans.jz[2][1]=0;while(b){ if(b&1){ans=jzcheng(ans,a); } b/=2; a=jzcheng(a,a);}return ans;
}int main()
{scanf("%d%d",&n,&p);juzhen s1,s2;s1.hang=2;s1.lie=1;s1.jz[1][1]=1;s1.jz[2][1]=0;n--;s2.hang=2;s2.lie=2;s2.jz[1][1]=1;s2.jz[1][2]=1;s2.jz[2][1]=1;s2.jz[2][2]=0;juzhen daan=jzcheng(jzkuai(s2,n),s1);cout<<daan.jz[2][1]; }
2017.3.25 矩阵快速幂 求斐波那契数列第n项相关推荐
- 矩阵快速幂求斐波那契数列(初学整理)
参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...
- 利用矩阵快速幂求斐波那契数列
我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法: 二阶递推:f(n+2)=(1 1) f(n+1) f(n+1) ...
- 矩阵快速幂及斐波那契数列模板
本篇博客先给出矩阵快速幂以及利用矩阵快速幂求斐波那契数列的模板,讲解待更新-- const int N=10; int tmp[N][N]; void multi(int a[][N],int b[] ...
- A - 【深蓝】教科书般的亵渎 (Gym - 102072A )(矩阵快速幂+计算斐波那契数列)
"现在给大家展示一波教科书般的亵渎" "扭了扭了" 炉石传说是一款比较火的卡牌游戏,不同的卡牌间可以打出许多不可思议的配合. 炉石传说的战斗大部分由随从来完成. ...
- ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】
描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...
- 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)
链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 矩阵快速幂及斐波那契数列
1.通用模板:矩阵快速幂 前几天写过一篇矩阵快速幂的一种解法,但是当时只是初学,所以用了当时我更好理解的方法去做.那个解法需要调用两个很相像的函数,而且容易造成紊乱,也不利于矩阵快速幂的推广,所以在观 ...
- 快速幂求解斐波那契数列
斐波那契数列 斐波那契数列是很经典也很简单的一条题目.其满足: F n = { 1 ( n ≤ 2 ) F n − 1 + F n − 2 ( n ≥ 3 ) F_{n}= \begin{cases} ...
- 求斐波那契数列前n项的值
Description 输入n,求斐波那契数列前n项的值.斐波那契数列规律如下:1, 1, 2, 3, 5, 8, 13,21, 34,55-,从第三项开始,每一项都是前面两项的和. Input 输入 ...
最新文章
- 查询SDE数据库,GSON报错:declares mutiple JSON fields named data
- Kafka概念入门(一)
- 简单动画函数封装及缓动效果
- 07-CoreData清除所有数据
- llinux的shell脚本编程详解
- 游戏上线... 记录下...
- 安卓逆向_4 --- Java 学习
- AJAX不能访问MVC后台程序的问题
- c语言保龄球计分系统课程设计,[C语言课程设计保龄球积分.doc
- 如何制作生成GIF?手把手教你生成GIF动态图
- XUGU:利空频传,建网站如何去赚钱?
- python:ocr图文识别(百度智能云API文字识别)
- python 自定义函数计算相应在不同k值时的cp值_Python版_实验二:K近邻算法分析与应用 - 作业.doc...
- 【数据库视频】--查询
- JQuery 添加元素(jquery对象),删除元素( .remove())
- 关于Windows 7下的DEP(数据执行保护)
- Efficient Cinimatic Lighting(Jeremy Vickery)-1 Basic theory
- Android 客户端 okhttp3 与服务器之间的双向验证
- 音量调节器Music Equalizer1.9
- CP2K代码分析二:cp2k_run
热门文章
- java并发编程并发容器_Java并发编程:同步容器
- Sublime中查找重复行的正则表达式
- JAVA 简单综合题目 小型公司职工对象
- 生活质量衡量系统_一文看懂质量管理精髓——“零缺陷”管理
- Visual Studio注释快捷键
- 在Windows上编译Spark源码
- hypertrm超级终端_win7电脑怎么添加windows超级终端
- oracle linux内存推荐分配,[20191114]linux内存分配的讨论.txt
- 使用idea创建项目的步骤
- c语言二维数组中的周边,【C语言】二维数组中的查找,杨氏矩阵