破译密码

莫比乌斯反演入门题目,但是先从容斥的角度理解这道题目

由于这道题目\(a,b\)的值可以不同,所以不用数论容斥,换一个角度,考虑把\(k\)除进去然后互质

所以主要就是解释一下\(F[a,b]\)是怎么推导的

我们从容斥原理的角度考虑。对于任意一个二元组\((x,y)\),如果\(gcd(x,y)≠1\),那么\(gcd(x,y)\)一定是某一个质数的倍数

\(P_i\)表示最大公约数的质数\(i\)的倍数的集合,那么我们要求的反面就是\(|P_2∪P_3∪P_5...|\),将这个式子用容斥原理打开即可

然后我们震惊的发现,这个完全可以用莫比乌斯函数来描述。比如求\(|P_2∩P_3∩P_5|\),就是求\(2\times3\times5=30\)的倍数的个数,其质因子的指数都为\(1\)(也就是所说的square-free number),所以莫比乌斯函数的值也就为\(±1\),而且符号刚好与容斥中的符号相符;至于对于莫比乌斯函数值为\(0\)的数,此时就是某个质因子的指数大于\(1\)了,刚好我们写成这种形式不会影响答案

所以以上模型可以记住

最后讲一下那个优化

由于\(a\)最多贡献\(O(\sqrt{a})\)个不同的值,\(b\)最多贡献\(O(\sqrt{b})\)个不同的值,所以两者放一起就是最多贡献\(O(\sqrt{a}+\sqrt{b})\)个值;像代码那么写的话,每一次一定会跳到某一个段的右端点,也就是\(a\)或者\(b\)贡献的不同值,所以最多也只会跳根号次

类似的简单容斥:Problem b

然后来讲一下莫比乌斯反演

莫比乌斯反演的基本操作就是将式子化出一个\([gcd(i,j)=1]\),然后利用公式\(\sum_{d|gcd(i,j)}u(d)=[gcd(i,j)=1]\)化简

基本步骤:

第一步,化出\([gcd(x,y)=1]\)(如果没有就强行凑)

第二步,利用公式\(\sum_{d|gcd(i,j)}u(d)=[gcd(i,j)=1]\)\([gcd(x,y)=1]\)换掉

第三步,换序,将上面的\(d\)放到最外层枚举

换序这一步一般是最关键的,一般来说,出现了\(x|i\)这种式子,那么要么把\(x\)放在外层枚举(这个“外层”不一定是整个式子的最外层,比如三层循环的话,第二层也是第二层和第三层的外层),要么令\(xk=i\),然后枚举\(k\)

当然上面说的是一般,有一种反例,也就是反演的第二形式,就要有限枚举\(T\)\(T\)是什么看下面几道题目就知道了)

以上就是莫比乌斯反演题目的套路做法。然后还要提醒一个需要注意的小点,我们证明过\(\lfloor \frac{n}{kd}\rfloor=\lfloor\frac{\lfloor\frac{n}{d}\rfloor}{k}\rfloor\),这个式子既有可能从左往右用也有可能从右往左用

那么对于这道题目的莫比乌斯反演解法就去看OI-wiki就好了,由于出现的是\([gcd(i,j)=k]\)而不是\([gcd(i,j)=1]\),所以将\(k\)除进去就好了

posted @ 2024-05-03 21:55  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报