矩阵快速幂

来源:互联网 发布:云南作风评议网络投票 编辑:程序博客网 时间:2024/06/14 05:43

矩阵快速幂,原理与整数的快速幂一模(mu)一样,只是在运算的时候是对矩阵进行运算

Code :

////矩阵快速幂////能够进行幂运算的矩阵一定都是行与列元素个数相等的矩阵#include<bits/stdc++.h>using namespace std;int n;struct Matrix{    int mat[20][20];};Matrix Matrix_Mul(Matrix m1, Matrix m2){    Matrix mm;    memset(mm.mat, 0, sizeof(mm.mat));    for(int i = 0; i < n; i++)        for(int j = 0; j < n; j++)            for(int k = 0; k < n; k++)                mm.mat[i][j] += (m1.mat[i][k] * m2.mat[k][j]);    return mm;}Matrix Matrix_Pow(Matrix m, int k){    Matrix ans; // int ans = 1;    for(int i = 0; i < n; i++)    {        memset(ans.mat[i], 0, sizeof(ans.mat[i]));        ans.mat[i][i] = 1;    }    while(k != 0)    {        if(k & 1)            ans = Matrix_Mul(ans, m); //ans *= m;        m = Matrix_Mul(m, m); // m*= m;        k >>= 1;    }    return ans;}int main(){    Matrix mm;    scanf("%d", &n); //n行 能进行快速幂运算的都是方阵;    for(int i = 0; i < n; i++)        for(int j = 0; j < n; j++)            scanf("%d", &mm.mat[i][j]);    int k;    scanf("%d", &k);    mm = Matrix_Pow(mm, k);    for(int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)            cout << mm.mat[i][j] << " ";        cout << endl;    }    return 0;}

这回就美滋滋的开始进行利用吧!!偷笑