[矩阵快速幂]
大概就是一个 n*n 的矩阵A 求 A^k 的矩阵。
按照快速幂的思想来写。
1 void mult(ll a[][110],ll b[][110]) 2 { 3 memset(tmp,0,sizeof(tmp)); 4 for(int i=1;i<=n;i++) 5 for(int j=1;j<=n;j++) 6 for(int k=1;k<=n;k++) 7 { 8 tmp[i][j]+=(a[i][k]%mod)*(b[k][j]%mod); 9 tmp[i][j]%=mod; 10 } 11 for(int i=1;i<=n;i++) 12 for(int j=1;j<=n;j++) 13 a[i][j]=tmp[i][j]%mod; 14 }
1 void pow(ll a[][110]) 2 { 3 memset(res,0,sizeof(res)); 4 for(int i=1;i<=n;i++) 5 res[i][i]=1; 6 while(k) 7 { 8 if(k%2==1) mult(res,a); 9 mult(a,a); 10 k>>=1; 11 } 12 }
No matter how you feel, get up , dress up , show up ,and never give up.