#include<bits/stdc++.h>
using namespace std;
#define regi register int
int const rank=3;
typedef long long ll;
class mat
{
public:
ll m[rank][rank];
inline ll* operator[](int x){
return this->m[x];
}
};
mat inline operator*(mat a,mat b)
{
mat ret;
memset(&ret,0,sizeof(mat));
for(regi i=0; i<rank; i++){
for(regi k=0; k<rank; k++){
for(regi j=0; j<rank; j++){
ret[i][j]+=a[i][k]*b[k][j]%mod;
ret[i][j]%=mod;
}
}
}
return ret;
}
mat inline mpow(mat a,int n)
{
mat w,ret;
memset(&ret,0,sizeof(mat));
w=a;
for(regi i=0; i<rank; i++)
ret[i][i]=1;
for(; n;){
if(n&1){
ret=ret*w;
}
w=w*w;
n>>=1;
}
return ret;
}
矩阵快速幂模板
最新推荐文章于 2022-08-27 21:03:02 发布