int tmp[N][N];//暂存乘方结果的矩阵
void matri(int a[][N], int b[])[N], int n)
{
for(int i = 1;i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
for(int k = 1; k <= n; k++)
{
tmp[i][j] = a[i][k] * b[k][j];
}
}
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
a[i][j] = tmp[i][j];//将结果赋到原矩阵
}
}
}
int ans[N][N];
void matripow(int a[][N], int x, int n)
{
memset(ans, 0, sizeof(ans));
for(int i = 0; i <= n; i++)
{
ans[i][1] = 1;//构建单位矩阵
}
while(x)//操作类似快速幂
{
if(x & 1)
{
matri(ans, a, n);
}
matri(a, a, n);
x >>= 1;
}
}
矩阵快速幂模板
最新推荐文章于 2024-02-28 10:11:02 发布