学习笔记::杜教筛
\(0.杜教篩\)
\(杜教篩能解決積性函數前綴和 并且能做到線性以下\)
\(1.狄利克雷卷積\)
\(杜教篩通過狄利克雷卷積降低復雜度\)
\(狄利克雷卷積\)
\((f*g) =\sum_ozvdkddzhkzd{f(d)g(\frac{n}ozvdkddzhkzd)}\)
\(假設我們要求前綴和的函數是f(x)\)
\(那么設\)
\(S(n)=\sum_{i=1}^{n}{f(i)}\)
\(考慮(f*g)的前綴和\)
\(\sum_{i=1}^{n}\sum_{j|i}{f(i)g(\frac{i}{j})}=\sum_{ij\leq{n}}{f(i)g(j)}=\sum_{i=1}^{n}{g(i)*S([\frac{n}{i}])}\)
\(那么我們要求的總和就是\)
\(g(1)S(n)=\sum_{i=1}^{n}{(f*g)}-\sum_{i=2}^{n}{g(i)*S([\frac{n}{i}])}\)
\(后面那個東西可以用分塊和記憶化搜索優化\)
\(就和平常莫比烏斯反演的優化一樣\)
\(狄利克雷卷積可以利用分塊優化\)
$所以重點在于(f*g)的前綴和 $
\(所以我們只要構造一個g(x)使(f*g)的前綴和能夠快速求出來就好了\)
\(例如歐拉函數\phi{(x)} 我們知道\phi*I=id\)
\(那么帶入上面的式子就可以得出\)
\(S(n)=\frac{n*(n+1)}{2}-\sum_{i=2}^{n}{S([\frac{n}{i}])}\)
\(每次把S(n)的結果記憶化一下\)
\(預處理出n^{\frac{2}{3}}的\phi(n)的前綴和復雜度就能做到O(n^{\frac{2}{3}})了\)
轉載于:https://www.cnblogs.com/19992147orz/p/8329297.html
總結
- 上一篇: 给 Android 开发人员的 RxJa
- 下一篇: 缠语