矩阵快速幂模板

来源:互联网 发布:three.js 案例 编辑:程序博客网 时间:2024/06/17 22:01
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;    }}