#include
using namespace std;
class Matrix{
private:
int N;
int **matrix;
public:
Matrix();
~Matrix();
Matrix(int);
void init();
void unit();
void display();
Matrix& operator+(Matrix&);
Matrix& operator*(Matrix &);
Matrix& Mul(Matrix&,int);//矩阵和幂
};
Matrix::Matrix(){N=0;}
Matrix::~Matrix(){
int i;
for(i=0;i
delete[] matrix[i];
delete [] matrix;
}
Matrix::Matrix(int n){N=n;
matrix=new int*[N];
int i;
for(i=0;i
matrix[i]=new int[N];
int j;
for(i=0;i
for(j=0;j
matrix[i][j]=0;
}
void Matrix::unit(){
int i,j;
for(i=0;i
for(j=0;j
if(i==j)
matrix[i][j]=1;
}
void Matrix::init(){
int row,col;
for(row=0;row
for(col=0;col
cout
cin>>matrix[row][col];
}
}
Matrix& Matrix::operator*(Matrix &x){
int row,col;
int sum;
Matrix m(N);
for(row=0;row
for(col=0;col
int i;
sum=0;
for(i=0;i
sum=(sum+matrix[row][i]*x.matrix[i][col])%256;
m.matrix[row][col]=sum;
}
x=m;//出错''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
return x;
}
Matrix& Matrix::Mul(Matrix&x,int n){
int bri[1000];
int count=0;
while(n!=0){
bri[count]=n%2;
n=n/2;
count++;
}
Matrix m(N);
m.unit();
for(int i=count-1;i>-1;i--){
m=m*m;
if(bri[i]==1)
m=m*x;
}
x=m;
return x;
}
void Matrix::display(){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
cout<<" "<<matrix[i][j];
}
cout<<endl;
}
}
Matrix& Matrix::operator +(Matrix&x){
int i,j;
Matrix m(N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
m.matrix[i][j]=matrix[i][j]+x.matrix[i][j];
x=m;
return x;
}
int main(){
int n;
cout<<"输入矩阵阶数"<<endl;
cin>>n;
Matrix N(n);
N.init();
cout<<"输入幂"<<endl;
cin>>n;
Matrix K(n);
K=N.Mul(N,n);
cout<<"所求矩阵为:"<<endl;
K.display();
return 0;
}