题目描述
给定一个n*n的矩阵,求该矩阵的k次幂,即P^k。
输入描述:
第一行:两个整数n(2<=n<=10)、k(1<=k<=5),两个数字之间用一个空格隔开,含义如上所示。 接下来有n行,每行n个正整数,其中,第i行第j个整数表示矩阵中第i行第j列的矩阵元素Pij且(0<=Pij<=10)。另外,数据保证最后结果不会超过10^8。
输出描述:
对于每组测试数据,输出其结果。格式为: n行n列个整数,每行数之间用空格隔开,注意,每行最后一个数后面不应该有多余的空格。
要注意矩阵结构体定义格式,掌握快速幂算法,打印矩阵的函数需要单独封装不然会报错,因为嵌套太多。
#include <iostream>
#include <cstdio>
using namespace std;
struct Matrix
{
int matrix[10][10];
int row,col;
Matrix(int r,int c):row(r),col(c){} //构造函数
};
Matrix Multiplication(Matrix m,Matrix n) //矩阵乘法
{
Matrix y(m.row,n.col);
for(int i=0;i<m.row;i++)
{
for(int j=0;j<n.col;j++)
{
int sum=0;
for(int k=0;k<m.col;k++)
{
sum+=(m.matrix[i][k]*n.matrix[k][j]);
}
y.matrix[i][j]=sum;
}
}
return y;
}
Matrix Fastmodular(Matrix p,int k) //快速幂运算
{
Matrix