矩阵快速幂&快速幂
原创
©著作权归作者所有:来自51CTO博客作者DeathYmz的原创作品,请联系作者获取转载授权,否则将追究法律责任
矩阵快速幂&快速幂
一、快速幂
typedef long long ll;
ll quic_power(ll x,ll n,ll mod)
{
ll result=1;
while(n)
{
if(n&1)
{
result*=x;
result%=mod;
}
x*=x;
x%=mod;
n>>=1;
}
return result;
}
二、矩阵快速幂
typedef long long ll;
const ll mod=998244353;
struct matrix{
ll x[3][3];
};
matrix multi(matrix a,matrix b)//矩阵相乘
{
matrix temp;
memset(temp.x,0,sizeof(temp.x));
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
for(int k=0;k<3;k++)
{
temp.x[i][j]+=a.x[i][k]*b.x[k][j];
temp.x[i][j]%=mod;//负数取模的问题,除法取模
}
return temp;
}
matrix quick_multi(matrix a,ll n)//矩阵快速幂
{
matrix temp=a;
n--;
while(n){
if(n&1)
temp=multi(temp,a);
a=multi(a,a);
n>>=1;
}
return