莫比乌斯反演

题单介绍

# 莫比乌斯反演 ## 前置芝士 [莫比乌斯反演](https://oi-wiki.org/math/mobius/) ## 例题略解 #### [P2257 YY的GCD](https://www.luogu.com.cn/problem/P2257) 果然数论的题是真心不好搞。 第一个莫比乌斯反演的题,好好推一下式子吧。。(借鉴了[blog](https://www.cnblogs.com/peng-ym/p/8652288.html)) 我们要求的答案就是$Ans=\sum\limits_{i=1}^{n}\sum\limits _{j=1}^{m}[\gcd(x,y)=prim]$ 这算是一类题了,大概套路如下: * $f[d]$ 表示 $\gcd(i,j)$ 所有的方案数。 即:$f(d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)=d]$ * $F(n)$ 为 $\gcd(i,j)=n$ 和 $n$ 的倍数的个数 即:$F(n)=\sum\limits_{n|d}f(d)=\lfloor\frac{N}{n}\rfloor\lfloor\frac{M}{n}\rfloor$ 也就是N中为n的倍数的数目与M中为n的倍数的数目的乘积就是所求的 F(n) 了。 * 根据以上的定义,莫比乌斯反演不难得出: $f(n)=\sum\limits_{n|d}\mu(\lfloor\frac{d}{n}\rfloor)F(d)$ 接下来就是**化简式子**了 $Ans=\sum\limits_{p\in prim}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)=p]$ 将$f(p)$带入上面式子: $Ans=\sum\limits_{p\in prim}f(p)$ 再用上面的式子3莫比乌斯反演一下: $Ans=\sum\limits_{p\in prim}\sum\limits_{p|d}\mu(\lfloor\frac{d}{p}\rfloor)F(d)$ 将之前给出的$F(n)$表达式带入,再更改一下循环顺序: $Ans=\sum\limits_{T=1}^{min(n,m)}\sum\limits_{t|T,t\in prime}\mu(\lfloor\frac{T}{t}\rfloor)\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor$ $Ans=\sum\limits_{T=1}^{min(n,m)}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor(\sum\limits_{t|T,t\in prime}\mu(\lfloor\frac{T}{t}\rfloor))$ 最后,**数论分块**一下求一个前缀和就好了。 数论分块: 对于任意一个$i(i \le n)$,我们需要找到一个最大的 $j(i \le j \le n )$,使得![Screenshot_2021-06-05 莫比乌斯反演 - OI Wiki_1_.png](https://i.loli.net/2021/06/05/CK1nXOG6pyQJi58.png) 此时 ![Screenshot_2021-06-05 莫比乌斯反演 - OI Wiki.png](https://i.loli.net/2021/06/05/QtlsEHF5qrjZOzn.png) * 注意:只有ans开 long long就好了,都开的话会TLE [$code$](https://www.luogu.com.cn/paste/yxn3aopv) #### [P3312 [SDOI2014]数表](https://www.luogu.com.cn/problem/P3312) 又是一道数论毒瘤题 ~~(好像数论题每一道都挺毒瘤)~~. LateX公式来自[blog](https://www.cnblogs.com/genshy/p/14387489.html) 我们要求的是 $\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m} \sigma(\gcd(i,j))[ \sigma(\gcd(i,j)) \leq a]$ 和上一个题比较相似,先枚举一下gcd: $\displaystyle\sum_{d=1}^{n} \sigma(d)[\sigma(d) \leq a] \sum_{i=1}^{n}\sum_{j=1}^{m} [\gcd(i,j) == d]$ 在按老套路反演一下gcd: $\displaystyle\sum_{d=1} ^{n}\sigma(d) [\sigma(d)\leq a] \sum_{i=1}^{n\over d}\sum_{j=1}^{m\over d} [\gcd(i,j) == 1]$ $\displaystyle\sum_{d=1}^{n}\sigma(d)[\sigma(d) \leq a] \sum_{i=1}^{n\over d}\sum_{j=1}^{m\over d} \sum_{p|i,p|j}\mu(p)$ $\displaystyle\sum_{d=1}^{n}\sigma(d) [\sigma(d) \leq a] \sum_{p=1}^{n\over d} \mu(p) {n\over {dp}} {m\over dp}$ 将式子中的dp设为Q,并进行枚举: $\displaystyle\sum_{Q=1}^{n} {n\over Q}{m\over Q} \sum_{d\mid Q} \sigma(d)[\sigma(d)\leq a] \mu({n\over Q})$ 将式子的后半部分设为f 即:$\displaystyle f(n) = \sum_{d\mid n} \sigma(d) \mu({n\over d})$ 然后再用树状数组,和数论分块进行一些处理就好了, 至于过程中的取mod,直接用unsigned int自然溢出,最后再按位与一下INT_MAX。 [$code$](https://www.luogu.com.cn/paste/mztxkl8b) #### [U164222 [BZOJ3309]DZY Loves Math](https://www.luogu.com.cn/problem/U164222) 这个题相比上一个题来说就显得简单许多了,优化比较少。 总结一下套路打法吧: 1. 列出原始式子 2. 更改式子,枚举不同的gcd,然后通过$[\gcd(i,j)=1]=\sum\limits_{d|gcd(i,j)} \mu(d)$将gcd转化成$\mu$ 3. 更改枚举的数值,把gcd干掉。 4. 构建线性筛 5. 前缀和与数论分块优化 6. long long 慎开 本题的话就是$\sum\limits_{T=1}^{\min(a,b)}\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\sum\limits_{d|T}f(d)\mu(\frac{T}{d})$ 然后线性筛一下f函数就行了。 * 注意:只有ans开 long long就好了,更新时要给其他的乘上1ll [$code$](https://www.luogu.com.cn/paste/w3mr39qy) #### [P3327 [SDOI2015]约数个数和](https://www.luogu.com.cn/problem/P3327) LateX公式有点多,懒得打了,粘一篇[别人的题解](https://www.luogu.com.cn/blog/_post/89727) ![Screenshot_2021-06-05 P3327 _SDOI2015_约数个数和 - 洛谷 计算机科学教育新生态.png](https://i.loli.net/2021/06/05/Vuc6xOXzQFKLNdT.png) [$code$](https://www.luogu.com.cn/paste/hxpxomw8) #### [P4449 于神之怒加强版](https://www.luogu.com.cn/problem/P4449) LateX公式来自于[blog](https://www.cnblogs.com/Wolfycz/p/9485396.html) 和前面的题大同小异,显然可以得出以下式子: $\sum\limits_{T=1}^n\lfloor\dfrac{n}{T}\rfloor\lfloor\dfrac{m}{T}\rfloor\sum\limits_{d|T}d^k\mu(\dfrac{T}{d})$ 为了方便计算前缀和,令$g(T)=\sum\limits_{d|T}d^k\mu(\dfrac{T}{d})$ 不难发现,这是个积性函数,于是我们进行如下推算: $g(T)=\prod\limits_{i=1}^t g(P_i^{x_i})$ $=\prod\limits_{i=1}^t(P_i^{k\times (x_i-1)}\times \mu(P_i)+P_i^{k\times x_i}\times \mu(1))$ $=\prod\limits_{i=1}^t P_i^{k\times (x_i-1)}\times(P_i^k-1)$ 第一行就是积性函数的性质,这里不予以过多说明。 第二行:因为$P_i$是质因数,所以$P_i$的因数只有1和他本身,式子的前半部分就是因数为本身的情况,后半部分就是因数为1的情况。 第三行:将第二行式子后半部分拆成$P_i^{k\times(x-1)} \times P_i^k\times\mu(1)$,又因为$\mu(1)=1,\mu(P_i)=-1$便得出了最后的式子。 最后再按套路进行线性筛以及数论分块就好了。 [$code$](https://www.luogu.com.cn/paste/li1hh522) #### [P1829 [国家集训队]Crash的数字表格 / JZPTAB](https://www.luogu.com.cn/problem/P1829) 显然$lcm(x,y)=\dfrac{x\times y}{gcd(x,y)}$ 原式也就等价于$\sum\limits_{i=1}^n\sum\limits_{j=1}^m\frac{i\cdot j}{\gcd(i,j)}$ 和原来的套路一样枚举$gcd$,两个数除以$gcd$得到的数互质 $\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{d|i,d|j,\gcd(\frac{i}{d},\frac{j}{d})=1}\frac{i\cdot j}{d}$ 把$gcd$化到分子上 $\sum\limits_{d=1}^n d\cdot\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1]\cdot i\cdot j$ 后半段式子中,出现了互质数对之积的和,把它拿出来单独计算,计为$sum$。 即:$\operatorname{sum}(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m [\gcd(i,j)=1]\cdot i\cdot j$ 接下来对 $sum⁡(n,m)\operatorname{sum}(n,m)sum(n,m)$ 进行化简。首先枚举约数,并将$[\gcd(i,j)=1]$ 表示为 $\varepsilon(\gcd(i,j))$ $\sum\limits_{d=1}^n\sum\limits_{d|i}^n\sum\limits_{d|j}^m\mu(d)\cdot i\cdot j$ 设$i=i'\cdot d,j=j'\cdot d$(其中 i′,j′ 指上式中的 i,j),可以将式子变为: $\sum\limits_{d=1}^n\mu(d)\cdot d^2\cdot\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j$ 观察上式,前半段可以预处理前缀和;后半段又是一个范围内数对之和,因此: $g(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m i\cdot j=\frac{n\cdot(n+1)}{2}\times\frac{m\cdot(m+1)}{2}$ 可以$\Theta(1)$求解 $\operatorname{sum}(n,m)=\sum\limits_{d=1}^n\mu(d)\cdot d^2\cdot g(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$ 对$\lfloor\dfrac{n}{\lfloor\frac{n}{d}\rfloor}\rfloor$数论分块求$\operatorname{sum}(n,m)$函数 再看最上面的式子可得: $\sum\limits_{d=1}^n d\cdot\operatorname{sum}(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$ 不难发现,这个式子也可以**数论分块**,总的复杂度为$\Theta(n+m)$ 在线性筛的时候有两种打法: 1. 先求出莫比乌斯函数,进而求出sum 2. 直接线性求sum 方法二快于方法一,上面主讲方法一,hzoj方法二[$code$](https://www.luogu.com.cn/paste/6sc9dc99) * 注意:取模上括号慎用!!!!,次序不同 [$code$](https://www.luogu.com.cn/paste/8miqidy4) #### [P3704 [SDOI2017]数字表格](https://www.luogu.com.cn/problem/P3704) 显然: $\begin{aligned}&\prod_{i=1}^{N}\prod_{j=1}^{M}F_{\gcd(i,j)} \\=&\prod_{k=1}^{N}{F_{k}}^{\left(\sum\limits_{i=1}^{N}\;\sum\limits_{j=1}^{M}\;\left[\gcd(i,j)=k\right]\right)}\end{aligned}$ 指数部分可以化乘为加: $\begin{aligned}&= \sum_{i=1}^{N}\sum_{j=1}^{M}\left[\gcd(i,j)=k\right]\\&= \sum_{i=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{M}{k}\right\rfloor}\left[\gcd(i,j)=1\right]\\&= \sum_{d=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\mu(d)\left\lfloor\frac{N}{kd}\right\rfloor\left\lfloor\frac{M}{kd}\right\rfloor\end{aligned}$ 因此: $\begin{aligned} &= \prod_{k=1}^{N}{F_{k}}^{\left(\sum_{d=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\mu(d)\left\lfloor\frac{N}{kd}\right\rfloor\left\lfloor\frac{M}{kd}\right\rfloor\right)}\\ &= \prod_{T=1}^{N}\left(\prod_{k|T}{F_{k}}^{\mu(\frac{T}{k})}\right)^{\left\lfloor\frac{N}{T}\right\rfloor\left\lfloor\frac{M}{T}\right\rfloor} \end{aligned}$ 令$f(n)=\prod_{d|n}{F_{d}}^{\mu(\frac{n}{d})}$ 那么:$=\prod_{T=1}^{N}{f(T)}^{\left\lfloor\frac{N}{T}\right\rfloor\left\lfloor\frac{M}{T}\right\rfloor}$ 外层数论分块,内层直接暴力干掉。 时间复杂度:$\Theta(N(\log N+\log mod)+T\sqrt{N}\log mod)$ [$code$](https://www.luogu.com.cn/paste/dtgd2eue) #### [P6271 [湖北省队互测2014]一个人的数论](https://www.luogu.com.cn/problem/P6271) ![Screenshot_2021-06-08 P6271 _湖北省队互测2014_一个人的数论 - 洛谷 计算机科学教育新生态.png](https://i.loli.net/2021/06/08/VnAECghrMfbi3kv.png) [$code$](https://www.luogu.com.cn/paste/36katxck)

题目列表

  • YY的GCD
  • [SDOI2014] 数表
  • [BZOJ3309]DZY Loves Math
  • [SDOI2015] 约数个数和
  • 于神之怒加强版
  • [国家集训队] Crash的数字表格 / JZPTAB
  • [SDOI2017] 数字表格
  • [湖北省队互测2014] 一个人的数论