和 lyh 想的差不多,我認為我寫的會更詳細一些。
dyc 好厲害。完全想不到這樣的做法。
給你兩個整數 \(n\),\(m\),讓你求以下式子的值。
\[T(n) = \sum_{i=1}^{n} f(i)\times i\bmod m
\]
對於斐波那契數列 \(f(n)=f(n-1)+f(n-2)\) 這樣的性質,使用字首和化簡式子是個好東西。
式子就變成了
\[T(n) = \sum_{i=1}^{n} s(n)-s(i-1)
\]
提出 \(s(n)\),結合一下斐波那契數列的結論 \(s(i)=f(i+2)-1\),進行代入。
\[T(n) = n\times s(n)-\sum_{i=1}^{n}s(i-1)
\]
對 \(\sum\) 進行化簡
\[T(n) = n\times f(n+2)-n-\sum_{i=1}^{n} f(i+1) +n
\]
剩下的步驟很容易了。
\[\begin{aligned}
T(n) &= n\times f(n+2)-n-\sum_{i=2}^{n+1} f(i)+n \\
&= n\times f(n+2)-n-\sum_{i=2}^{n+1}f(i)+f(1)-f(1)+n\\
&=n\times f(n+2)-n-\sum_{i=1}^{n+1}f(i) - f(1) +n\\
&=n\times f(n+2)-s(n+1)-1\\
&=n\times f(n+2)-(f(n+3)-1)-1\\
&=n\times f(n+2)-f(n+3)+2\\
\end{aligned}\]
矩陣快速冪加速遞推 \(f\) 即可,於是就用 \(\log\) 的優秀複雜度求 \(T(n)\) 了。