最高科技——疯狂的前缀和
求\[\sum_{k=1}^N f_k\]
顯然這玩意是可以\(O(N)\)的,看起來也不能再優化了。
但是在這個宇宙中確實還存在著更快的算法……
令\[g_n=\sum_{d|n}f_d , F_n=\sum_{k=1}^{n}f_k\]
因為\[\sum_{k=1}^N g_k = \sum_{k=1}^N {f_k \lfloor \frac Nk \rfloor} = \sum_{k=1}^N F_{\lfloor \frac Nk \rfloor}\]
整理得到\[F_N=\sum_{k=1}^N g_k -?\sum_{k=2}^N F_{\lfloor \frac Nk \rfloor}\]
如果能夠在 \(O(\sqrt{N})\)的時間內求出\(\sum_{k=1}^N g_k\),那么可以在\(O(N^\frac 34)\)的時間內計算出\(F(N)\)。
\(\sum_{k=1}^N g_k\)對于某些特殊的\(g_k\)能做的很快,例如\[\sum_{k=1}^N\sum_{d|k}\mu(d)=1\]\[\sum_{k=1}^N \sum_{d|k}\phi(d)=\sum_{k=1}^N k=\frac{N(N+1)}{2}\]
如果\(g_n\)能夠很快的計算,那么可以對于\(n \leq N^\frac 23\)線性暴力計算\(F_n\),否則遞歸計算,可以做到\(O(N^\frac 23)\)。
轉載于:https://www.cnblogs.com/zhuohan123/p/3847466.html
總結
以上是生活随笔為你收集整理的最高科技——疯狂的前缀和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery效果 窗口弹出案例
- 下一篇: bzoj1054