杜教筛

…因为网页崩溃导致要重写一遍……
首先看一道板子题:bzoj 3944 https://www.cnblogs.com/lokiii/p/8329320.html
要求在低于线性的时间内莫比乌斯函数和欧拉函数的前缀和。因为都是积性函数,所以这里以mu为例。设 \( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\mu(i)\) ,然后很显然对于mu \(g(n)=1 \),对于phi \( g(n)=n*(n+1)/2 \),然后可以这样转化一下:

\[g(n)=\sum_{i=1}^{n}\sum_{d|n}\mu(d) \]

\[=\sum_{d=1}^{n}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor \]

\[=\sum_{d=1}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor) \]

\[s(n)=g(n)-\sum_{d=2}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor) \]

然后递归求解子问题即可。
类似的题还有:

51nod 1224 https://www.cnblogs.com/lokiii/p/8334589.html

51nod 1239 https://www.cnblogs.com/lokiii/p/8333844.html

其实是一样的但是时间卡的比较死。

通过这些题可以发现杜教筛的套路就是把一个问题转换为几个形式相同但范围更小的问题递归求解,从而做到低于线性的复杂度。子问题的构造一般是用一个叫狄利克雷卷积的东西,不过我比较习惯瞎推,因为套路就那么几个,推起来也方便。

以下整理一些常见的推导套路:
1、

\[\sum_{d|n}\mu(d)=0(n!=1) \]

证明:

\[\sum_{i=0}^{k}C_k^i(-1)^k=(1-1)^k \]

2、设F(n)为1到n中无平方因子数的个数

\[F(n)=\sum_{i=1}^{\sqrt{n}}\mu(i)\left \lfloor \frac{n}{i^2} \right \rfloor \]

3、设 \( f(d)=\sum_{k|d}\mu(k)k \),p为质数

\[f(p^k)=f(p)=1-p \]

4、

\[\sum_{d|n}\mu(d)\frac{n}{d}=\phi(d) \]

证明:

\[\phi(n)=\sum_{i=1}^{n}[gcd(i,n)==1] \]

\[=\sum_{i=1}^{n}\sum_{d|i,d|n}\mu(d) \]

\[=\sum_{d|n}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor=\sum_{d|n}\mu(\left \lfloor \frac{n}{d} \right \rfloor)d \]

5、设 d为约数个数 ,\( d(ij)=\sigma_0(ij) \)

\[d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \]

例:bzoj 4176 https://www.cnblogs.com/lokiii/p/8331366.html

6、设 d为约数个和,\( d(ij)=\sigma_1(ij) \)

\[d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \]

例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

7、$$ |\mu(n)|==1 $$

\[\phi(nk)=\sum_{d|n,d|k}\phi(\frac{n}{d})\phi(k ) \]

\[\mu(n)==0 \]

\[s(n,m)=\frac{n*s(k,m)}{k} \]

例:bzoj 3512 https://www.cnblogs.com/lokiii/p/8330148.html

8、对于积性函数f,t为约数个数,ki为约数幂,pi为第i个约数:

\[\sum_{d|n}f(d)=\prod_{i=1}^{t}\sum_{j=0}^{k_i}f(p_i^j) \]

9、

\[d|ij=d|\frac{d}{gcd(i,d)} \]

10、

\[\sum_{i=1}^{n}\phi(i^2)=\sum_{i=1}^{n}i\phi(i) \]

例:bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

11、对于任意积性函数构造子问题形式。这里以mu为例,设\( f(i)=\mu(i)i^k \),\( s(n)=\sum_{i=1}^{n}f(i) \),\( g(n)=\sum_{i=1}{n}\sum_{d|i}ik\mu(d) \) ,对于mu,\( g(n)=\sum_{i=1}{n}ik \);对于phi,\( g(n)=\sum_{i=1}{n}i \)

有如下推导:

\[g(n)=\sum_{i=1}^{n}\sum_{d|i}i^k\mu(d) \]

\[g(n)=\sum_{i=1}^{n}\sum_{d=1}^{i-1}[d|i]i^k\mu(d)+s(n) \]

\[s(n)=g(n)-\sum_{i=1}^{n}\sum_{d=1}^{i-1}[d|i]i^k\mu(d) \]

\[s(n)=g(n)-\sum_{j=1}^{n}j^k\sum_{d=1}^{\left \lfloor \frac{n}{j} \right \rfloor}d^k\mu(d) \]

\[s(n)=g(n)-\sum_{j=1}^{n}j^ks(\left \lfloor \frac{n}{j} \right \rfloor) \]

例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html
bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

12、打表找规律可得:

\[\sum_{i=1}^{n}\sum_{j=1}^{i}[gcd(i,j)==1]ij=\sum_{i=1}^{n}i\frac{i\phi(i)+[i==1]}{2} \]

例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html
51nod 1227 https://www.cnblogs.com/lokiii/p/8327746.html

13、设\( f(n)=\sum_{i=1}^{n}i \)

\[\sum_{i=1}^{n}f(\left \lfloor \frac{n}{i} \right \rfloor) \]

\[=\sum_{i=1}^{n}\sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}j \]

\[=\sum_{i=1}^{n}\sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}j \]

\[=\sum_{j=1}^{n}j\left \lfloor \frac{n}{j} \right \rfloor \]

例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

14、

\[\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==1] \]

\[2\sum_{i=1}^{n}\phi(i)-1 \]

例:51nod 1237 https://www.cnblogs.com/lokiii/p/8320975.html

时间复杂度就不介绍了 我不会啊,据说预处理前 n^{\frac{2}{3}} +记忆化的部分复杂度可以达到 O(n^{\frac{2}{3}}) 。

结果这篇只有前面一点点是杜教筛其他都是套路啊

posted @ 2018-01-23 16:02  lokiii  阅读(170)  评论(0编辑  收藏  举报