杜教筛

Posted lokiii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杜教筛相关的知识,希望对你有一定的参考价值。

…因为网页崩溃导致要重写一遍……
首先看一道板子题: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{k+1} \\)

有如下推导:

\\[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}}) 。

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

以上是关于杜教筛的主要内容,如果未能解决你的问题,请参考以下文章

hdu5608杜教筛

杜教筛

杜教筛

浅谈杜教筛

数论狄利克雷卷积及其快速计算方法及杜教筛

杜教筛