适用场景
主要适用于快速计算一个 monoid 对象的多次 concat 运算后的结果。核心点在于减少 concat 的调用次数。时间复杂度大致上为logN。
monoid 定义伴随着:
代码框架
常见题型
计算某个数的指数与某指定数的余数。
背景知识补充
求余有如下规律: (a*b)%c =((a%c)*b)%c = ((a%c)*(b%c))%c,即任意两数乘积的求余,等价于任意因子的求余结果的乘积再取余的结果。
故修改concat函数为
快速计算数列An
面对a_{n} = a * a_{n-1} + b * a_{n-2} + c*a_{n-3},可以整理的如下矩阵:
故问题转变为特定矩阵的n-3次方的计算。