学习笔记::杜教筛
\(0.杜教筛\)
\(杜教筛能解决积性函数前缀和 并且能做到线性以下\)
\(1.狄利克雷卷积\)
\(杜教筛通过狄利克雷卷积降低复杂度\)
\(狄利克雷卷积\)
\((f*g) =\sum_{d}{f(d)g(\frac{n}{d})}\)
\(假设我们要求前缀和的函数是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}])}\)
\(后面那个东西可以用分块和记忆化搜索优化\)
\(就和平常莫比乌斯反演的优化一样\)
\(狄利克雷卷积可以利用分块优化\)
$所以重点在于(fg)的前缀和 \(
\)所以我们只要构造一个g(x)使(fg)的前缀和能够快速求出来就好了\(
\)例如欧拉函数\phi{(x)} 我们知道\phiI=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{3}})了$