在一个半群中,$a^n$ 的运算可以使用快速幂,即在不超过 $2log_2(n)$ 的运算下完成计算。
直接用一个实例 hdu1588 Gauss Fibonacci 即可体现其思想。
问题
设 f 是 Fibonacci 数列满足:
- $f(0)=0$
- $f(1)=1$
- $f(n)=f(n-1)+f(n-2) ,\; n \geq 2$
求 Gauss Fibonacci 问题
$$ \sum_{i=0}^{n-1} f(k*i+b) $$
求解
令 $ A = \left[ \begin{matrix} 1 & 1 \\ 1 & 0 \end{matrix} \right] $ 则
$$ \left( \begin{matrix} f(n+1) \\ f(n) \end{matrix} \right) = A \left( \begin{matrix} f(n) \\ f(n-1) \end{matrix} \right) = A^n \left( \begin{matrix} 1 \\ 0 \end{matrix} \right) $$
于是求解 $f(n)$ 可转化为求解 $A^n$ 另外 Gauss Fibonacci 问题可转化为求解
$$ A^b \cdot \sum_{i=0}^{n-1} A^{ki} $$
代码
1 | //#pragma comment(linker,"/STACK:10240000,10240000") |