破译密码

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

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

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

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

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

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

所以以上模型可以记住

最后讲一下那个优化

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

类似的简单容斥:Problem b

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

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

基本步骤:

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

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

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

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

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

以上就是莫比乌斯反演题目的套路做法。然后还要提醒一个需要注意的小点,我们证明过nkd=ndk,这个式子既有可能从左往右用也有可能从右往左用

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

posted @   最爱丁珰  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示