#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
今日推荐
周排行