http://acm.hdu.edu.cn/showproblem.php?pid=2971对于:f[n]=a*f[n-1]+b*f[n-2]....这类线性变换,构造变换矩阵,用矩阵乘法来做。
一般数会很大,结果mod一个整数。这里要注意变换矩阵中可能存在负数,需要求出关于mod的逆元来运算。
总结:线性变换 矩阵乘法 TLE处理
![](data:image/png;base64,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)
using namespace std;
long long c,n;
long long mod;
long long mtx[5][5];
long long e[5][5];
long long tmp[5][5];
long long r[5];
long long temp[5];
void init()
{
mtx[1][1]=1;mtx[1][3]=1;
mtx[2][1]=0;mtx[2][3]=1;
mtx[3][1]=0;mtx[3][2]=1;
mtx[3][3]=0;mtx[3][4]=0;
mtx[4][1]=0;mtx[4][3]=0;
mtx[2][2]=mtx[1][2]=4*c*c % mod;
mtx[2][4]=mtx[1][4]=(mod-4*c % mod) % mod;
mtx[4][4]=mod-1;mtx[4][2]=2*c % mod;
return ;
}
void matrix_mul()
{
for (int i=1;i<=4;i++)
for (int j=1;j<=4;j++)
tmp[i][j]=mtx[i][j];
for (int i=1;i<=4;i++)
for (int j=1;j<=4;j++)
{
mtx[i][j]=0;
for (int k=1;k<=4;k++)
{
mtx[i][j]=(mtx[i][j]+tmp[i][k]*tmp[k][j]) % mod;
}
}
return ;
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%lld%lld%lld",&c,&n,&mod);
init();
r[1]=(c*c+1) % mod;r[2]=c*c % mod;
r[3]=1;r[4]=c % mod;
if (n==1)
{
printf("%lld\n",1 % mod);
continue;
}
if (n==2)
{
printf("%lld\n",r[1] % mod);
continue;
}
n-=2;
while (n)
{
if (n&1)
{
for (int i=1;i<=4;i++)
temp[i]=r[i];
for (int i=1;i<=4;i++)
{
r[i]=0;
for (int j=1;j<=4;j++)
{
r[i]=(r[i]+temp[j]*mtx[i][j]) % mod;
}
}
}
matrix_mul();
n>>=1;
}
printf("%lld\n",r[1] % mod);
}
return 0;
}