矩阵快速幂(Matrix_Fast_Power)
一、基础知识
(1)矩阵乘法
https://blog.csdn.net/weixin_43272781/article/details/82899737
简单的说矩阵就是二维数组,数存在里面,矩阵乘法的规则:A*B=C
其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:
代码:
const int N=100;
int c[N][N];
void multi(int a[][N],int b[][N],int n)//n是矩阵大小,n<N
{memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)c[i][j]+=a[i][k]*b[k][j];
}
另一种写法:
int c[N][N];
void multi(int a[][N],int b[][N],int n)
{memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)c[i][j]+=a[i][k]*b[k][j];
}
这种可以在第二重for判断if(a[i][k]==0)continue;对于矩阵有较多0的有一定效果。不过一般第一种写法就够了,这种知道就行。
显然矩阵乘法的复杂度是O(n^3);(O(n^2.7)的方法不会写,无视这里)。
这里我直接写的是n*n的矩阵(即方阵),显然两个相乘是要一行和一列对应乘,那么矩阵乘法是需要A的行数与B的列数相等的(这是A*B的前提条件,可见矩阵的乘法是不满足交换律的)。然而这些一般都是没什么用的,矩阵快速幂只会用到方阵(除非题目是裸的矩阵乘法)。矩阵快速幂都是方阵也就避免的相乘的前提条件,可以放心用。
二、矩阵构造方法
https://blog.csdn.net/weixin_43272781/article/details/88878064
三、矩阵快速幂
如果不知道快速幂的请参考:https://blog.csdn.net/weixin_43272781/article/details/85058595
const int N=10;
int tmp[N][N];
void multi(int a[][N],int b[][N],int n)
{memset(tmp,0,sizeof tmp);for(int i=0;i<n;i++)for(int j=0;j<n;j++)for(int k=0;k<n;k++)tmp[i][j]+=a[i][k]*b[k][j];for(int i=0;i<n;i++)for(int j=0;j<n;j++)a[i][j]=tmp[i][j];
}
int res[N][N];
void Pow(int a[][N],int n)
{memset(res,0,sizeof res);//n是幂,N是矩阵大小for(int i=0;i<N;i++) res[i][i]=1;while(n){if(n&1)multi(res,a,N);//res=res*a;复制直接在multi里面实现了;multi(a,a,N);//a=a*an>>=1;}
}
值得注意的是矩阵快速幂只适用于n*n的矩阵方阵。
四、例题
http://poj.org/problem?id=3070
http://poj.org/problem?id=3233
http://acm.hdu.edu.cn/showproblem.php?pid=2276
http://acm.hdu.edu.cn/showproblem.php?pid=5015
https://ac.nowcoder.com/acm/contest/338/L(题解:https://blog.csdn.net/weixin_43272781/article/details/85937715)
http://acm.hdu.edu.cn/showproblem.php?pid=3306
http://acm.hdu.edu.cn/showproblem.php?pid=2157(题解:https://blog.csdn.net/weixin_43272781/article/details/88958713)
五、参考文章
http://www.matrix67.com/blog/archives/276
http://www.cnblogs.com/frog112111/archive/2013/05/19/3087648.html?tdsourcetag=s_pcqq_aiomsg
https://www.cnblogs.com/frog112111/archive/2013/05/15/3080678.html
https://www.cnblogs.com/frog112111/archive/2013/05/16/3081493.html
https://www.cnblogs.com/frog112111/archive/2013/05/16/3082416.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089358.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089687.html
https://www.cnblogs.com/frog112111/archive/2013/05/21/3089953.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3092012.html
https://www.cnblogs.com/frog112111/archive/2013/05/20/3089802.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3093697.html
https://www.cnblogs.com/frog112111/archive/2013/05/22/3093757.html
矩阵快速幂(Matrix_Fast_Power)相关推荐
- 矩阵快速幂+构造方法
与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...
- 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂
原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...
- 快速幂 + 矩阵快速幂
快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...
- HDU4549(矩阵快速幂+快速幂)
f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...
- [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]
解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...
- I-Matrix Power Series POJ - 3233 矩阵快速幂+分治
I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...
- H - Fibonacci POJ - 3070 (矩阵快速幂)
H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...
- HDU 6185 Covering 矩阵快速幂 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...
- bzoj 1409 Password 矩阵快速幂+欧拉函数
可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...
最新文章
- SAP HUM 如何将2个HU合并并成一个?
- 服务器异常代码413问题
- 【零散积累】传输文件(sz/rz/scp命令)
- LeetCode-MySQL196. 删除重复的电子邮箱
- HYSPLIT 教程 有关记录
- android 半浮层框架
- php实战视频教程 帝国cms二次开发,帝国cms7.5二次开发整合CKPlayer播放器教程
- 如何高效开展测试用例评审?附用例评审检查清单及用例评审报告模板
- 知识产权服务代理行业税收政策
- intel 服务器芯片型号怎么看,Intel CPU编号详解
- 外星人大战---------------------游戏开发
- python爬取微信制作照片墙
- Word中表的自动断开、且断开处有空白页面的问题之解决
- shader 处理cad线型 其中一小段的思路
- 大专毕业学的汽修想转行学计算机,机械转计算机后悔 机械转行学什么好
- Docker各平台下安装
- 谭安林:大数据在智能外呼系统的应用
- 汇聚创新 共创未来---记2016华为开发者大赛沙龙深圳站
- 短链接服务Octopus的实现与源码开放
- creo自定义调用零件库_cero基础设置教程,五步cero5.0设置调用自定义标准件的方法...
热门文章
- linux中安装httpd安装错误,linux安装httpd和nginx常见问题及解决办法
- python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作
- oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程
- python获取计算机信息系统数据罪_工作心得:破坏计算机信息系统罪与非法获取计算机信息系统数据罪的区分...
- 下载Java Jar包的网站(托管厂库)
- JavaScript中的三种常用继承方法
- mysql group_concat distinct,如何在MySQL中使用GROUP_CONCAT和CONCAT与DISTINCT引用单列值?...
- 计算机系学生的职业生涯作文,医学生职业生涯规划的作文800字
- 六十一、Python中的smtplib和email实现邮件发送
- 北极约200万个甲烷点被发现,人类的反思该提上日程了,因为只有一个地球