您的位置:首页 > 其它

矩阵快速幂模板

2017-08-08 09:22 253 查看
int tmp

;//暂存乘方结果的矩阵
void matri(int a[]
, int b[])
, 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

;
void matripow(int a[]
, 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: