快速幂
int fastpow(int base,int n,int mod){
int ans=1;
while(n){
if(n&1) ans*=base%mod;
base*=base;
n>>=1;
}
return ans%mod;
}
矩阵快速幂
struct matrix
{
ll x[105][105];
matrix(){memset(x,0,sizeof(x));}
};
matrix multiply(matrix &a,matrix &b)
{
matrix c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
c.x[i][j]+=a.x[i][k]*b.x[k][j];
return c;
}
matrix mpow(matrix &a,ll m)
{
matrix res;
for(int i=1;i<=n;i++) res.x[i][i]=1;
while(m>0)
{
if(m&1) res=multiply(res,a);
a=multiply(a,a);
m>>=1;
}
return res;
}
跳转
题目
790. 多米诺和托米诺平铺