题目描述非常的清晰
首先我们考虑(A*B)^m的求法,这个部分可以参考BZOJ 杰杰的女性朋友
我们不难发现(A*B)^m=A*(B*A)^(m-1)*B
A*B是n*n的矩阵,而B*A是k*k的矩阵,这样就大大缩小了矩阵的大小
因为矩阵乘法满足结合律,我们先对(B*A)做快速幂,之后乘一下就可以了
之后我们考虑如果没有(i-1)^3的这个系数怎么求G(i)的前缀和
因为矩阵乘法满足分配率,我们利用矩阵倍增((B*A)^0+(B*A)^1……+(B*A)^(m-1))之后乘一下就可以了
之后我们发现把系数配进去我们需要求sigma(i^3*(B*A)^i)这个矩阵
我们考虑sigma(i*(B*A)^i)的求法
设F(i)=i*(B*A)^i,H(i)=(B*A)^i
F(i)= j*(B*A)^i + (i-j) *(B*A)^i = (j*(B*A)^j * (B*A)^(i-j)) + ((i-j)*(B*A)^(i-j) *(B*A)^j)
F(i)=F(j)*H(i-j)+F(i-j)*H(j)
同理我们将i^2转化成(j+(i-j))^2之后展开会得到i^2*(B*A)^i的公式
然后同样转化i^3也可以得到类似的公式
这样我们重新定义一下矩阵乘法就可以同样利用矩阵倍增求出sigma(i^3*(B*A)^i)了
这样就可以得到答案了