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