莫比乌斯反演与杜教筛
$\ \ \ \ \ \ \ \,$关于莫比乌斯反演,杜教筛等的杂记:
初识数论常见积性函数:欧拉函数$\varphi$,莫比乌斯函数$\mu$
$\ \ \ \ \ \,$所谓积性函数,就是对于一个函数$f(x)$,若是对于任意$x_1$,$x_2$满足$f(x_1)\times f(x_2)=f(x_1\times x_2)$。对于任何积性函数$f(x)$,都有$f(1)=1$。
欧拉函数$\varphi(x)$的意义:在$[1,x]$内,与$x$互质的个数。
$1$.若$x$为素数,$\varphi(x)=x-1$;
$2$.若$x\%p=0$,$\varphi(x\cdot p)=\varphi(x)\cdot p$;
$3$.若$x\%p\neq 0$,且$x$为素数,$\varphi(x\cdot p)=\varphi(x)\cdot (p-1)$;
莫比乌斯函数$\mu(x)$的意义:设$x$的不同质因子个数为$a$,$\mu(x)=(-1)^{a}$;当n存在平方因子时,$\mu(x)=0$。
$1$.若$x$有奇数个不同质因数,$\mu(x)=-1$。
$2$.若$x$有偶数个不同质因数,$\mu(x)=1$。
$3$.若$x$有平方因子,$\mu(x)=0$。
$\ \ \ \ \ \,$还有一些简单的积性函数,在这里一并介绍了:
$ϵ(x)=\begin{cases}1&x=1\\0&x>1\end{cases}$
$id(x)=x$
$id^k(x)=x^k$
$\sigma(x)=\sum_{i|x}1$
$1$
数论分块
$\ \ \ \ \ \,$很多时候,我们会遇到这样的式子:
$\sum_{i=1}^{n}f(i)\times g\left(\left\lfloor\frac{n}{i}\right\rfloor\right)$
$\ \ \ \ \ \,$若是我们已经提前知道了$f(x)$在$x\in [1,n]$的值了,但是需要多次计算上面形式的式子的值,每次询问复杂度是$O(n)$的,显然在询问很多的时候,没有很划算。
$\ \ \ \ \ \,$我们枚举了很多$i$,使得很多$\left\lfloor\frac{n}{i}\right\rfloor$都相等,所以我们可以把$\sum_{i=1}^{n}$,分成$\sqrt{n}\ $块,使得每一块的$\left\lfloor\frac{n}{i}\right\rfloor$都相等,这样我们可以通过结合律得到下面的式子,$O(n)$预处理$sum(x)=\sum_{i=1}^{x}f(i)$,来简化询问复杂度到$O(\sqrt{n})$:
1 | int Get_ans(int n){ |
狄利克雷卷积
$(f*g)(n)=\sum_{x|n}f(x)\times g\left(\frac{n}{x}\right)$
既:
$(f*g)(n)=\sum_{xy=n}f(x)\times g(y)$
狄利克雷卷积的性质:
**1.交换律:** $f*g=g*f$;
**2.结合律:** $(f*g)*h=g*(f*h)$;$(a\times f)*g=a\times (f*g)$;
**3.分配律:** $(f+g)*h=f*h+g*h$;
**4.单位元:** $ϵ*f=f$;其中$ϵ(x)=\begin{cases}1&x=1\\0&x>1\end{cases}$;
**5.逆元:** 对于每个$f(1)\neq0$的函数,都存在一个函数$g$使得$f*g=ϵ$;
**6.两个积性函数的狄利克雷卷积是积性函数。**
$\ \ \ \ \ \,$如何求一个函数的逆:
$\begin{aligned}ϵ&=f*g\\ &=\sum_{x|n}f(x)\times g\left(\frac{n}{x}\right)\\ &=f(1)\times g(n)+\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)\\&=[n=1]\end{aligned}$
$\ \ \ \ \ \,$所以有:
$f(1)\times g(n)=[n=1]-\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)$
$g(n)=\frac{1}{f(1)}\left([n=1]-\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)\right)$
$\ \ \ \ \ \,$其中$\mu$就是函数$1$的逆,也就是说$\mu*1=ϵ$
莫比乌斯反演
$\ \ \ \ \ \,$莫比乌斯反演的本质就是利用性质$\mu*1=ϵ$,改变枚举方式,降低式子的复杂度。
$\ \ \ \ \ \,$最常见的操作是,反演式子$\sum_{i=1}^n\sum_{j=1}^{m}[gcd(i,j)=1]$:
$\sum_{i=1}^n\sum_{j=1}^{m}[gcd(i,j)=1]$
$\sum_{i=1}^n\sum_{j=1}^{m}ϵ(gcd(i,j))$
$\sum_{i=1}^n\sum_{j=1}^{m}(\mu*1)(gcd(i,j))$
$\sum_{i=1}^n\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\mu(d)\times 1$
$\sum_{i=1}^n\sum_{j=1}^{m}\sum_{d=1}^{min(n,m)}\mu(d)[d|gcd(i,j)]$
$\sum_{d=1}^{min(n,m)}\mu(d)\sum_{i=1}^n\sum_{j=1}^{m}[d|gcd(i,j)]$
$\sum_{d=1}^{min(n,m)}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}1$
$\sum_{d=1}^{min(n,m)}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}1\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}1$
$\sum_{d=1}^{min(n,m)}\mu(d){\left\lfloor\frac{n}{d}\right\rfloor}{\left\lfloor\frac{m}{d}\right\rfloor}$
莫比乌斯反演经典例题回顾
P2522 [HAOI2011]Problem b(反演+容斥)
P2257 YY的GCD(反演)
P3312 [SDOI2014]数表(反演+离线+数据结构)
P3327 [SDOI2015]约数个数和(反演,数表的简化版)
P3455 [POI2007]ZAP-Queries(反演,裸的)
P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演+欧拉筛,做法新奇)
P3768 简单的数学题(反演+杜教筛)
P4240 毒瘤之神的考验(反演+奇怪的分块,基本上很结论题了)
P1587 [NOI2016]循环之美(反演+杜教筛+数学知识+奇技淫巧,难题来了)
杜教筛
$\ \ \ \ \ \,$杜教筛是求积性函数的前缀和的筛法,复杂度可以达到小于线性的$O(n^{\frac{2}{3}})$。
$\ \ \ \ \ \,$对于一个积性函数$f$,令$S(n)=\sum_{i=1}^nf(i)$,再新定义一个函数$g$,则有:
$\begin{aligned}&\sum_{i=1}^n(f*g)(i)\\=&\sum_{i=1}^n\sum_{x\times y=i}f(x)\times g(y)\\=&\sum_{y=1}^ng(y)\sum_{x\times y\leq n}f(x)\\=&\sum_{y=1}^ng(y)\sum_{x=1}^{\left\lfloor\frac{n}{y}\right\rfloor}f(x)\\=&\sum_{y=1}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)\end{aligned}$
$\ \ \ \ \ \,$那么就有:
$\sum_{i=1}^n(f*g)(i)=g(1)S(n)+\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)$
$\ \ \ \ \ \,$既:
$g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)$
$S(n)=\frac{\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)}{g(1)}$
$S(n)={\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)}$
$\ \ \ \ \ \,$若是函数$(f*g)$和$g$的前缀和都可以$O(1)$地算出来,那么我们计算$S(n)$的值的时候递归处理,便可以优化复杂度到$O(n^{\frac{3}{4}})$。
$\ \ \ \ \ \,$但若是我们先线性预处理出$S(i)\ {i\in[1,n^{\frac{2}{3}}]}$的值,复杂度就可以优化到$O(n^{\frac{2}{3}})$
$\ \ \ \ \ \,$那么现在的问题是如何找到这个神奇的函数$g$:
对于$\varphi(x)$:
$\begin{aligned}\varphi(x)=&\prod_{p|x,p\ \rm{is\ prime}}\frac{p^k(p-1)}{p}\\=&x\times \prod_{p|x,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned}$
$\begin{aligned}(\varphi*1)(x)=&\sum_{i|x}\varphi(i)\times 1\left(\frac{x}{i}\right)\\=&\sum_{i|x}\varphi(i)\\=&\sum_{i|x}i\times \prod_{p|i,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned}$
显然$(\varphi*1)(x)$
在$x$为素数的次方情况下,$(\varphi*1)(x)=x$
,而$(\varphi*1)(x)$
又为积性函数,可以证明在定义域下$(\varphi*1)(x)=x$
,既$\varphi*1=id$。
所以我们选取$g=1$,$(f*g)=id$,容易求和。
1 | long long Sum_id(int x){return 1ll*x*(x+1)/2;} |
对于$\mu(x)$:
已知$\mu*1=ϵ$
所以我们选取$g=1$,$(f*g)=ϵ$,容易求和。
1 | long long Sum_e(int x){return 1ll;} |
注意:杜教筛套杜教筛复杂度还是$O(n^\frac{2}{3})$,因为实际上他们是并列进行的。
贝尔级数
$\ \ \ \ \ \,$对于其他积性函数,为了找到满足条件的$g$,我们引入贝尔级数,需要用到生成函数的姿势,但是实际上只需要记住下面的公式就够用了:
$\ \ \ \ \ \,$对于积性函数$f$,定义$f$模$p$的贝尔级数为:
$f_p(x)=\sum_{i=0}^{\infty}f(p^i)x^i$
$\ \ \ \ \ \,$一个完全积性函数的贝尔级数为几何级数:
$f_p(x)=\frac{1}{1-f(p)\times x}$
$\ \ \ \ \ \,$例如(“*”完全积性函数):
*$ϵ_p(x)=1$
*$1_p(x)=\frac{1}{1-x}$
*$id^k_p(x)=\frac{1}{1-p^k\cdot x}$
$\mu_p(x)=1-x$
$\sigma_p(x)=\frac{1}{(1-x)^2}$
$(\sigma_1)_p(x)=\frac{1}{1-\sigma_1(p)x+px^2}$ ——> $\left[(\sigma_k)_p(x)=\frac{1}{1-\sigma_k(p)x+p^kx^2}\right]$
$\varphi_p(x)=\frac{1-x}{1-p\cdot x}$
$\ \ \ \ \ \,$有了这个东西,我们边可以把狄利克雷卷积化成一般卷积的形式:
$(f*g)_p(x)=f_p(x)\times g_p(x)$
$\ \ \ \ \ \,$再带回去就可以得到我们想要的$g$和$g*f$,主观感觉非常复杂。
一些比较常见的容易求的卷积
$\mu*\sigma=1$
$id*id=n$
$\varphi*1=id$
$\mu*id=\varphi$