const int MAXN = 110;
struct Matrax
{
int m[MAXN][MAXN];
}a,per;
int N,M;
void Init()
{
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
{
scanf("%d",&a.m[i][j]);
a.m[i][j] %= M;
per.m[i][j] = (i == j);
}
}
Matrax Multi(Matrax a,Matrax b) //a * b
{
Matrax c;
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
{
c.m[i][j] = 0;
for(int k = 0; k < N; ++k)
c.m[i][j] += a.m[i][k]*b.m[k][j];
c.m[i][j] %= M;
}
return c;
}
Matrax Power(int k) //a^k % M
{
Matrax c,p,ans = per;
p = a;
while(k)
{
if(k&1)
ans = Multi(ans,p);
p = Multi(p,p);
k >>= 1;
}
return ans;
}
Matrax Add(Matrax a,Matrax b) // a + b
{
Matrax c;
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
c.m[i][j] = (a.m[i][j] + b.m[i][j]) % M;
return c;
}
Matrax MatraxSum(int k) //a + a^2 + a^3 + … + a^k
{
if(k == 1)
return a;
Matrax temp,b;
temp = MatraxSum(k/2);
if(k&1)
{
b = Power(k/2+1);
temp = Add(temp,Multi(temp,b));
temp = Add(temp,b);
}
else
{
b = Power(k/2);
temp = Add(temp,Multi(temp,b));
}
return temp;
}
矩阵快速幂【模板】
原创
©著作权归作者所有:来自51CTO博客作者ITCharge的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
接口幂等方案
接口幂等方案
ide 幂等 Express -
矩阵快速幂模板
设A为m * k的矩阵,B为k * n的矩阵,那么称m*n的矩阵C为
#include i++ 初始化