数论函数前缀和
前言
下文\(*\)均指\(Dirichlet\) 卷积。
\(\lfloor\frac{a}{b}\rfloor\) 简记为 \(\frac{a}{b}\) 。
杜教筛
首先对于我们要求前缀和的函数\(f\)。
找出合适的函数\((f*g)\)和\(g\)。
且满足:
- \((f*g)\) 易求前缀和。
- \(g\) 易求前缀和。
设\(f\)的前\(n\)项和为\(S(n)\)
\[\begin{aligned}
\sum_{i=1}^{n}(f*g)(i)
&=\sum_{i=1}^{n}\sum_{d|i}g(d)f(\frac{i}{d}) \\
&=\sum_{d=1}^{n} g(d) \sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}f(i) \\
&=\sum_{d=1}^{n} g(d)S(\frac{n}{d})
\end{aligned}
\]
移项得:
\[S(n)d(1)=\sum_{i=1}^{n}(f*g)(i)-\sum_{d=2}^{n} g(d)S(\lfloor \frac{n}{d}\rfloor)
\]
\(PN\) 筛
首先对于我们要求前缀和的积性函数\(f\)。
找出合适的函数\(g\)。
且满足:
- \(g\) 是积性函数。
- \(g\) 易求前缀和。
- 对于质数 \(p\) ,满足 \(g(p)=f(p)\)
构造积性函数 \(h\) 满足 \(f=g*h\) 。
\[\begin{aligned}
\sum_{i=1}^{n}f(i)
&=\sum_{i=1}^{n}\sum_{d|i}h(d)g(\frac{i}{d}) \\
&=\sum_{d=1}^{n}h(d) \sum_{i'=1}^{\frac{n}{d}}g(i') \\
&=\sum_{d=1}^{n}h(d)G(\frac{n}{d}) \\
&=\sum_{d是PN数}^{n}h(d)G(\frac{n}{d})
\end{aligned}
\]
计算 \(h(p^c)\)
\[f(p^c)=\sum_{i=1}^{c}h(p^i)g(p^{c-i})
\]
移项得:
\[d(p^c)=f(p^c)-\sum_{i=1}^{c-1}h(p^i)g(p^{c-i})
\]
\(Meissel-Lehmer\)
随便水水
\(dp_{i,j}\) 表示前 \(i\) 个数中不是前 \(j\) 个质数倍数的个数
\[\pi(n)=\pi(n^{\frac{1}{3}})+dp_{n,\pi(n^{\frac{1}{3}})}-1-\sum_{p>n^{\frac{1}{3}}}^{n^{\frac{1}{2}}}(\pi(\frac{n}{p})-\pi(p)+1)
\]
\[dp_{i,j}=dp_{i,j-1}-dp_{\frac{i}{p_j},j-1}
\]
减一是减去未被筛去的数字 \(1\) 的贡献。
再减去未被前 \(n^{\frac{1}{3}}\) 个质数筛掉的合数个数即为所求。