zoukankan      html  css  js  c++  java
  • 【莫比乌斯反演·入门篇】懵逼钨丝反演

    (Preface)

    莫比乌斯反演是一种看似高深的数学知识(所以被萌新们称作懵逼钨丝反演),可实际上有一定了解之后,就会发现也不过那点套路啦~~~

    因此,本文主要是对莫比乌斯反演的相关定义以及基本套路的介绍。

    前置知识

    • 狄利克雷卷积: 这个东西比较简单,其实也就在一些定理证明上会派上用场,不会也罢。实在想知道的可自行百度。
    • 除法分块: 这个就很有用了,是莫比乌斯反演题的常客,或许可以看看这篇博客:除法分块及其应用

    莫比乌斯函数

    定义

    莫比乌斯函数,符号为(mu(d)),它的具体定义如下:

    [mu(d)=egin{cases}1&d=1\(-1)^k&d=prod_{i=1}^kp_i,p_iin Prime(forall i ot=j,p_i ot=p_j)\0&exists pin Prime,p^2|dend{cases} ]

    唔姆,余不太用得来数学符号,上面的式子可能有些诡异。

    但信(罗)仰(马)又不允许余在公式里使用中文,因此下面再放一份文字描述:

    • (d=1)(mu(d)=1)。(积性函数的共通性质)
    • (d)能分解为(k)不相同质数的乘积,(mu(d)=(-1)^k)
    • (d)包含相同的质因子,(mu(d)=0)

    性质(1)(sum_{d|n}mu(d)=[n=1])

    这是一个基本性质,用狄利克雷卷积的形式表示就是:

    [mu*I=e ]

    性质(2)(sum_{d|n}frac{mu(d)}d=frac{phi(n)}n)

    这个东西其实很好证的啦,把两式同时乘上(n),得到:

    [sum_{d|n}mu(d) imesfrac nd=phi(n) ]

    其实这东西完全可以写成狄利克雷卷积的形式,也就是:

    [mu*id=phi ]

    这个东西怎么来的呢?

    首先要知道(mu*I=e)(上面有了),(phi*I=id)(欧拉函数的性质,这里就不证明了),(f*e=f)(元函数的性质,其中(f)为任意函数)。

    那么,只要在②式两边同时卷个(mu),就会发现(I)刚好和它消掉了,也就得到了要证的式子。

    莫比乌斯反演定理

    公式

    [F(n)=sum_{d|n}f(d)Leftrightarrow f(d)=sum_{d|n}mu(d)F(frac nd) ]

    证明

    考虑如何证明,同样需要狄利克雷卷积的知识。

    显然这两个式子分别为:

    [egin{align}F=f*I\f=mu*Fend{align} ]

    然后就发现这一步证明和前面性质(2)的证明非常像,只要在②式两边同时卷个(I),就得到①式啦!

    是不是顿悟了?那就尽情地夸赞余吧!

    补充说明

    实际上吶,这个定理使用得并不多。

    (但还是有的,而且用得非常妙:【BZOJ4833】[Lydsy1704月赛] 最小公倍佩尔数。)

    而做莫比乌斯反演题更常见的解题方式将在下面进行介绍。

    莫比乌斯反演的基本套路

    例题

    给出一道典型例题:【BZOJ1101】[POI2007] Zap

    唔姆,下面就来介绍一下余的做法。

    套路一

    考虑题目中给出的式子:

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

    下面介绍第一个经典套路,对于(gcd(i,j)),一般做法就是枚举(gcd)

    但由于此题中已经限定(gcd(i,j)=d)(唔姆,似乎例题选得不太好?),因此无需枚举,直接将(i,j)都除以(d),得到:

    [sum_{i=1}^{lfloorfrac nd floor}sum_{j=1}^{lfloorfrac md floor}[gcd(i,j)=1] ]

    套路二

    第二个套路,对于([gcd(i,j)=1]),利用(sum_{d|n}mu(d)=[n=1])这个基本性质,把它用莫比乌斯函数表示得到:

    [sum_{i=1}^{lfloorfrac nd floor}sum_{j=1}^{lfloorfrac md floor}sum_{p|i,p|j}mu(p) ]

    其实核心目的就是去掉带有中括号的布尔值表达式。

    然后调整枚举顺序,将(p)提前得到:

    [sum_{p=1}^{min(lfloorfrac nd floor,lfloorfrac md floor)}mu(p)lfloorfrac n{dp} floorlfloorfrac m{dp} floor ]

    实际上熟练之后这些也都可以一步完成。

    最后的求解

    只需要除法分块就可以了。

    总结

    基本步骤就是上面的两个套路啦,可以多做些板子题去体会体会。

    你会发现,即便是再华丽的剧场,莫比乌斯反演在其中扮演的角色基本上也就只有这两招而已。

    (Postscript)

    以上就是莫比乌斯反演的基本套路了,其他一些更高级的套路余或许会在做过更多题目之后去介绍。

    完结撒花。

  • 相关阅读:
    jar命令打jar包
    kafka的一些参数
    fastdfs-nginx-module-master的一些奇怪的特点
    nginx 禁止恶意域名解析
    tcpdump抓包vrrp
    gitlab提交代码
    [Data]Segment Tree
    [Data]FHQ treap
    [Data]带修改的主席树[树状数组套主席树]
    [Data]可持久化线段树-主席树
  • 原文地址:https://www.cnblogs.com/Nero-Claudius/p/Mobius1.html
Copyright © 2011-2022 走看看