矩阵重载运算符

#include"iostream"
using namespace std;
const int MOD=1e9+7;
struct Matrix
{
    int a[2][2];
    Matrix ()
    {
        for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)a[i][j]=0;
    }
    Matrix (int a11,int a12,int a21,int a22)
    {
        a[0][0]=a11;
        a[0][1]=a12;
        a[1][0]=a21;
        a[1][1]=a22;
    }
};
Matrix operator*(Matrix A,Matrix B)
{
    Matrix res;
    for(int i=0;i<2;i++)
    for(int j=0;j<2;j++)
    for(int k=0;k<2;k++)
    {
        res.a[i][j]+=A.a[i][k]*B.a[k][j];
        res.a[i][j]%=MOD;
    }
    return res;
}
Matrix operator^(Matrix A,int n)
{
    Matrix res,base=A;
    res.a[0][0]=1;
    res.a[1][1]=1;
    while(n)
    {
        if(n&1)res=res*base;
        base=base*base;
        n>>=1;
    }
    return res;
}
int main()
{
    Matrix A(1,2,3,4);
    Matrix B=A*A;
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            cout<<B.a[i][j]<<" ";
        }
        cout<<endl;
    }
    Matrix C=A^10;
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            cout<<C.a[i][j]<<" ";
        }
        cout<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/swustlpf/article/details/80160093