解题思路:
第一种方法:
题意为给定矩阵A,以及k, mod ,求 A+A^2+A^3+......A^k 的和对mod取余。
一开始用循环k次,递推的做法,超时。。。
看了解题报告,求和的时候要用到二分求和。
所求的和用s(k)表示。
当k为偶数时:
比如 k=6,那么 A+A^2+A^3+A^4+A^5+A^6= A+A^2+A^3+ A^3*(A+A^2+A^3)
s(k)=s(k/2)+A^(n/2) * s(k/2) 即s(k)=(E+A^(n/2))*s(n/2) (E为单位矩阵)
当k为奇数时:
s(k)=s(k-1)+A^k , 那么k-1为偶数,可以按照上面的二分
matrix call(matrix A,int k)
{
if(k==1) return A;
if(k&1)
return addmatrix(call(A,k-1),powmatrix(A,k));//当k为奇数时,减1变为偶数 S(K)=S(K-1)+A^K
else
return mulmatrix(addmatrix(powematrix(A,0),powmatrix(A,k>>1)),call(A,k>>1));
//当K为偶数时,S(K)=(1+A^(K/2))*S(K/2)
}