目录
题目
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
代码
#include <iostream>
using namespace std;
int main()
{
int length,k;
long long int a[40][40];//保存每一次运算后的结果
long long int b[40][40];//输出b[][]
long long int t[40][40];//永远保存A本身
cin>>length>>k;
for(int i=0;i<length;i++)
{
for(int j=0;j<length;j++)
{
cin>>a[i][j];
t[i][j]=a[i][j];
if(k==0)//如果0次幂则输出单位矩阵
{
if(i==j)
b[i][j]=1;
else
b[i][j]=0;
}
}
}
for(int p=0;p<k-1;p++)
{
for(int s=0;s<length;s++)//b作为存储每一次结果的容器,在进行下一次的运算时要把上一次的结果置空,不置空的话上一次的运算结果会影响下一次的结果
for(int d=0;d<length;d++)
b[s][d]=0;
for(int m=0;m<length;m++)
for(int n=0;n<length;n++)
{
for(int i=0;i<length;i++)
{
b[m][n]=a[m][i]*t[i][n]+b[m][n];//b[m][n]=a[m][i]*a[i][n]+b[m][n];注意,这里是a和t的乘积,如果是a和a的成绩就变成了n的2次方幂
}
}
for(int x=0;x<length;x++)
for(int y=0;y<length;y++)
{
a[x][y]=b[x][y];
}
}
for(int i=0;i<length;i++)
{
for(int j=0;j<length;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
思路
线性代数基本思路