莫比乌斯反演练习

有用的结论:
1、若\(f(n),g(n)\)均为积性函数,则\(h_1(n)=f(n)g(n),h_2(n)=f*g\)均为积性函数(\(f*g\)表示两个函数的狄利克雷卷积)

2、\(\sigma_0(xy)= \sum_{i|x}\sum_{j|y}[gcd(i,j)=1]\)

证明:考虑将\(xy\)的每一个因数的一个映射.

\(xy=\prod_{i=1}^m p_i^{\alpha_i}(\alpha _i>0),x=\prod p_i^{\gamma_i}(\gamma_i\geq 0); d|xy\)\(d=\prod_{i=1}^m p_i^{\beta_i}(\beta_i\geq 0)\).那么对于\(d\),若将它映射到了两个数\(s,t\):对于它的每一个质因子\(p_i\)
(1) 若\(\beta_i\leq \gamma_i\),那么\(p^{\beta_i}\)就对\(s\)有贡献.
(2)若\(\beta_i> \gamma_i\),那么\(t\)就有一个\(p_i^{\beta_i-\gamma_i}\)的贡献.

最后将所有贡献相乘得到\(s,t\).

这样对\(xy\)的每一个质因子\(p_i\)\(p_i|s\)\(p_i|t\)至多只有一个成立,于是我们通过构造了一个一一映射的方式证明了上述定理.

Sample 1

给定\(n,m,d\),求

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

sol:

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=d]\\ =&\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(i,j)=1]\\ =&\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\sum_{k|gcd(i,j)}\mu(k)\\ =&\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor \end{aligned} \]

大力数论分块就完事了.

Sample 2

给定\(n,m\)

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

直接用\(\varphi\)进行反演的话就十分的easy

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m gcd(i,j)\\ =&\sum_{i=1}^n\sum_{j=1}^m \sum_{d|gcd(i,j)} \varphi(d)\\ =&\sum_{d=1}^n\varphi(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor \end{aligned} \]

直接数论分块就完事了,但是我们如果按照以往使用\(\mu\)的话

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m gcd(i,j)\\ =&\sum_{d=1}^nd\sum_{i=1}^m\sum_{j=1}^m[gcd(i,j)=d]\\ =&\sum_{d=1}^nd\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor \end{aligned} \]

直接做看起来是\(O(n\sqrt n)\)的,无法应对多组询问.这里有一个经典套路:我们设\(T=dk\),则:

\[\begin{aligned} &\sum_{d=1}^nd\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\\ =&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\mu(d)\frac{T}{d} \end{aligned} \]

\(f(T)=\sum_{d|T}\mu(d)\frac{T}{d}\),显然\(f(T)=\mu *id\),于是\(f\)积性,可以直接大力线筛了

这里其实可以观察到\(\sum_{d|T}\mu(d)\frac{T}{d}=\varphi(T)\),本质就是个容斥原理数\(1-n\)中与\(n\)互质的数,写成卷积的形式就是\(id*\mu=\varphi\)

Sample 3

bzoj3529

先丢掉\(a\)的限制,就是求

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

化一下式子可以得到

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\sigma_1(gcd(i,j))\\ =&\sum_{d=1}^n \sigma_1(d) \sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=d]\\ =&\sum_{d=1}^n\sigma_1(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor \end{aligned} \]

好了,如果你还记得上面那个题,就知道这里肯定还要换元,设\(T=dk\)

\[\begin{aligned} &\sum_{d=1}^n\sigma_1(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\\ =&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\sigma_1(d)\mu(\frac{T}{d}) \end{aligned} \]

\(f(T)=\sum_{d|T}\sigma_1(d)\mu(\frac{T}{d})=\sigma_1*\mu\),显然积性,但是由于数据小所以直接\(O(n\log_2 n)\)筛就完事了

那么就回来考虑\(a\)的限制,也就是只有\(\sigma_1(d)\leq a\)\(d\)才会对答案有贡献,我们可以将\(\sigma_1(d)\)从小到大排序,同时将询问按照\(a\)的大小排序,每次将所有\(\sigma_1(d)\leq a\)\(d\)枚举其倍数更新贡献,这个可以用树状数组维护,之后直接\(O(\sqrt n)\)回答询问即可

Sample 4

bzoj3994

给定\(n,m\),求

\[\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij) \]

sol:
根据本文最开始的结论,有

\[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\\ =&\sum_{x=1}^n\sum_{y=1}^m{\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{m}{y}\rfloor}[gcd(x,y)=1]\\ =&\sum_{x=1}^n\sum_{y=1}^m{\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{m}{y}\rfloor}\sum_{d|gcd(x,y)} \mu(d)\\ =&\sum_{d=1}^n\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor} \lfloor\frac{n}{xd}\rfloor\lfloor\frac{m}{yd}\rfloor \end{aligned} \]

这里的问题是,我们并不能像之前那样令\(T=xd\),原因是这样的话\(yd\)会变得非常棘手,我们需要考虑一些更本质的东西。

\(f(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\),那么最终的答案可以写作

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

现在考虑如何快速求\(f(n)\),把\(f(n)\)看做每次枚举一个因数\(i\),数一下有多少个数是它的倍数且\(\leq n\),于是不难发现\(f(n)=\sum_{i=1}^n\sigma_0(i)\),于是我们先\(O(n\log_2n)\)求出\(\sigma_0(n)\),再求其前缀和\(f\),最后套数论分块即可。

posted @ 2019-12-18 20:08  EncodeTalker  阅读(190)  评论(0编辑  收藏  举报