问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22
以下为本题的思路
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int M=sc.nextInt();//整数输入
int N=sc.nextInt();
int[][] A=new int[M][M];
int[][] r=new int[M][M];//定义单位矩阵
int[][] t=new int[M][M];//定义0矩阵
for(int i=0;i<M;i++) {//矩阵输入
for(int j=0;j<M;j++) {
A[i][j]=sc.nextInt();
}
}
for(int i=0;i<M;i++) {
r[i][i]=1;//r矩阵为单位矩阵
}
//现在进入矩阵相乘阶段,N为矩阵相乘的次数
while(N>=1) {
for(int i=0;i<M;i++) {
for(int j=0;j<M;j++) {
t[i][j]=0;
}
}
for(int i=0;i<M;i++) {
for(int j=0;j<M;j++) {
for(int k=0;k<M;k++) {
t[i][j]=t[i][j]+r[i][k]*A[k][j];
}
}
}
for(int i=0;i<M;i++) {
for(int j=0;j<M;j++) {
r[i][j]=t[i][j];
}
}N--;
}
for(int i=0;i<M;i++) {
for(int j=0;j<M;j++) {
System.out.print(r[i][j]+" ");
}
System.out.println();
}
}