发霉日记 Day1
今日目标 矩阵快速幂 完成矩阵快速幂模板 矩阵快速幂的相关运用 刷题 矩阵快速幂 矩阵快速幂是将矩阵乘法和快速幂进行结合,对递推式进行快速运算的一种方法。 矩阵乘法 假如矩阵a有m列s行,矩阵b有s列n行,那么他们的乘积是一个m行n列的矩阵。 如图所示,矩阵a有2行3列,矩阵b有3行2列,那么矩阵c就是一个2*2的矩阵。 矩阵乘法的规则就是a矩阵的m行与b矩阵的n列分别相乘。 a矩阵的行必须b矩阵的列相等才能进行矩阵乘法 快速幂 int QuickPow(int x,int N) { int res = x;//底数 int ans = 1;//和 while(N) { if(N&1)//判断二进制数最后位是否为1 //如果为1 { ans = ans * res;//将和与当前底数相乘得到新的和 } res = res*res;//更新底数 N = N>>1;//将二进制数后移一位,相当于/2 } return ans; } 快速幂就是将幂拆解 对于2 18 ,根据18的二进制数1 0 0 1 0,我们可以将2 8 拆解为(2 16 )*(2 2 )=2 18 。 矩阵快速幂的实现 矩阵快速幂 = 对矩阵使用快速幂算法 具体实现原理为,矩阵取代快速幂算法中的底数,矩阵乘法取代快速幂中的算数乘法。 矩阵快速幂模板 struct matrix { int m [ maxx ] [