/** 矩阵快速幂
*快速幂(quickpow)模版
* \P为等比,I为单位矩阵
* \MAX和MOD需要初始化
* \n是指数
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <map>
typedef __int64 ll;
using namespace std;
const int MAX=3;
const int MOD=9997;
typedef struct
{
int m[MAX][MAX];
}Matrix;
Matrix P={1,1,1,
1,1,1,
1,1,1};
Matrix I={1,0,0,
0,1,0,
0,1,0};
Matrix matrixmul(Matrix a,Matrix b)
{
int i,j,k;
Matrix c;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{
c.m[i][j]=0;
for(k=0;k<MAX;k++)
c.m[i][j]+=(a.m[i][k]*b.m[k][j])%MOD;
c.m[i][j]%=MOD;
}
return c;
}
Matrix quickpow(ll n)
{
Matrix m=P,b=I;
while(n>=1)
{
if(n&1)
b=matrixmul(b,m);
n=n>>1;
m=matrixmul(m,m);
}
return b;
}
int main()
{
Matrix ans;
ans=quickpow(3);//求3次方
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
cout<<ans.m[i][j]<<" ";
cout<<endl;
}
return 0;
}
模版—矩阵连乘快速幂
最新推荐文章于 2022-06-24 12:37:59 发布
本文介绍了矩阵快速幂的模板及其实现。通过快速幂算法,可以高效地进行矩阵连乘。代码中定义了矩阵结构体,实现了矩阵乘法和快速幂函数,最后在主函数中展示了计算3次方的例子。
摘要由CSDN通过智能技术生成