/* n阶方形矩阵快速幂模板,如果m*n的矩阵可以考虑将m,n存入结构体matrix中
函数分为3个,分别是矩阵相乘,转化单位矩阵,快速幂。
测试结果 AC
BY SHU_ONISAC */
#include<iostream>
#include<cstring>
using namespace std;
struct matrix{
long long a[15][15];
};
matrix matrix_muti(matrix a,matrix b,int n)//矩阵相乘(这个只要注意i,j,k的顺序就行了)
{
matrix c;
memset(c.a,0,sizeof(c.a));
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
for(int k=0;k<n;++k){
c.a[i][j]+=a.a[i][k]*b.a[k][j];
}
return c;
}
matrix init(matrix r,int n)//转化单位矩阵
{
for(int i=0;i<n;++i){
for(int j=0;j<n;++j)
r.a[i][j]=(i==j);
}
return r;
}
matrix fast_power(matrix a,int n,int k)//快速幂
{ matrix r;
r=init(r,n);//先将r.a化为单位矩阵
while(k){
if(k&1)r=matrix_muti(r,a,n);
/*(k&1)与(k&2==1)是一个意思
一个我自己写的矩阵快速幂模板
最新推荐文章于 2022-03-03 17:24:39 发布
本文提供了一个n阶矩阵快速幂的C++模板代码,包括矩阵相乘、单位矩阵转化和快速幂函数。通过示例展示如何使用该模板解决矩阵运算问题,适用于ACM竞赛等场景。
摘要由CSDN通过智能技术生成