f(n)=af(n-1)+bf(n-2)+c
f(n)=c^n-f(n-1)
以下是矩阵快速幂的板子:
typedef long long ll;
inline ll add(ll a,ll b)
{
a+=b;
if (a>=mod)
a-=mod;
if (a<0)
a+=mod;
return a;
}
inline ll mul(ll a,ll b)
{
return a*b%mod;
}
struct matrix
{
static const int N=5;
int mat[N][N],n,m;
matrix(){}
matrix(int _n,int _m,int v)
{
n=_n;
m=_m;
for (int i=0;i<n;++i)
for (int j=0;j<m;++j)
mat[i][j]=i==j?v:0;
}
matrix operator * (const matrix& a) const
{
matrix res(n,a.m,0);
for (int i=0;i<n;++i)
for (int j=0;j<a.m;++j)
for (int k=0;k<m;++k)
res.mat[i][j]=add(res.mat[i][j],mul(mat[i][k],a.mat[k][j]));
return res;
}
matrix operator ^ (ll b) const
{
matrix res(n,n,1),a=*this;
while (b)
{
if (b&1)
res=res*a;
a=a*a;
b>>=1;
}
return res;
}
};