矩阵的乘法和矩阵快速幂
2014-05-20 09:12
323 查看
代码如下:
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; typedef long long LL; const int N = 2,M=2,P=2; const int MOD=1000000007; struct Matrix { LL m ; }; Matrix A={1,1, 1,0}; Matrix I={1,0, 0,1}; Matrix multi(Matrix a,Matrix b)//矩阵乘法:a为N行P列的矩阵,b为P行M列的矩阵,二者相乘得到的矩阵为N行M列; { Matrix ans; for(int i=0;i<N;i++) for(int j=0;j<M;j++) { ans.m[i][j]=0; for(int k=0;k<P;k++) ans.m[i][j]+=a.m[i][k]*b.m[k][j]%MOD; ans.m[i][j]%=MOD; } return ans; } Matrix power(Matrix a,int k)//由整数的快速幂运算的出的矩阵快速幂 { Matrix ans=I,p=a; while(k) { if(k&1) { ans=multi(ans,p); } k>>=1; p=multi(p,p); } return ans; } int main() { int n; while(~scanf("%d",&n)) { Matrix ans=power(A,n-1); printf("%lld\n",ans.m[0][0]); } return 0; }
相关文章推荐
- poj3070(矩阵快速幂,矩阵乘法)
- Fibonacci数列(矩阵乘法快速幂)
- HLG 1126 Final Destination II 矩阵乘法+快速求幂
- 【矩阵乘法+快速乘】BZOJ2875-[NOI2012]随机数生成器
- hdu 4686 Arc of Dream(矩阵快速幂乘法)
- Vijos 1603 ----迷宫(矩阵乘法,矩阵快速幂)
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
- hdu 1575 Tr A(矩阵快速幂乘法优化算法)
- Fibonacci数列(矩阵乘法快速幂)
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
- hdu 1575 Tr A(矩阵乘法快速求幂)
- 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)
- luogu3390:矩阵快速幂(矩阵乘法+快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂乘法)
- 快速矩阵乘法:Strassen 演算法
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- 矩阵乘法快速幂 cojs 1717. 数学序列