zoukankan      html  css  js  c++  java
  • 【总结】莫比乌斯反演

    这是一篇有关莫比乌斯反演的总结

    莫比乌斯反演是什么?

    我也说不清

    其实做完了这么多题后,我对莫反的理解就只是两个式子

    然后在学莫反的过程中了解到了许许多多的套路,有用

    最基础的,两个式子

    我们假设有两个函数(F(n))(f(n))

    如果他们满足$$F(n)=sum_{d|n}f(d)$$

    那么$$f(n)=sum_{d|n}mu(d)F(frac{n}{d})$$

    如果他们满足$$F(n)=sum_{n|d}f(d)$$

    那么$$f(n)=sum_{n|d}mu(frac{d}{n})F(d)$$

    其实式子很容易记

    个人认为莫反真正有用的也就这两个式子了,那些性质理解了就行了,至于证明,OI从来没有证明

    所以本篇不记录那些性质和证明,主要记录莫反到底怎么用,还有一些套路

    莫比乌斯反演有什么用?怎么用?

    • 1 莫反是什么时候用的
      • 一般用于推数论公式之中。有一些题目是数学方面的,题目含义转换后可能答案就是一个式子的值,可是那个式子在一定复杂度内算不出来怎么办?那么就要不断降低或省去那些需要枚举的地方。这就是我们俗称的推式子
      • 而在推式子的过程中就有可能需要使用莫反。大部分需要用莫反的标志是所谓的(gcd)
    • 2 函数的设计
      • 函数的设计是一个关键点,也就是定义里的(F(n))(f(n))
      • 当你推式子被(gcd)之类的卡住了的时候,不妨试一试莫反,设计出来的(f(n))一般就是你被卡住的那一段式子,至于(F(n)),必须要和(f(n))相呼应,即要满足两对式子的条件,这样才能反演。感觉上,第二对式子,就是倍数关系那一对用得多一些
      • 设计出的(F(n))最好能在进行一定推导后变成形式非常简单的东东,最好是(O(1))计算的,反演给(f(n))就很好用,不然反演就没有什么实质性的用处(当然不排除一些特殊用法)
    • 3 (mu)的处理
      • 通常情况下,因为(mu)是积性函数,所以可以套路线性筛(积性函数筛的例子,可以见后文的[BZOJ 2693 jzptab]例题)
    • 4 最终求解
      • 式子推完,我们一般可以得到一个整除分块的东西和一个需要前缀和的东西,而前缀和一般(O(n))预处理
      • 整除分块的代码千篇一律:
        for(register int i=1;;)
        {
            	if(i>n)break;
            	int j=n/(n/i);	
            	ans+=......;
            	i=j+1;
        }
    

    一些很强的小套路

    • (d(x))(x)约数个数和,那么(d(nm)=sum_{i|n}sum_{j|m}[gcd(i,j)=1])
    • 经常性的改变枚举方式,只要枚举东西的本质相同,就放心去变(例如:(sum_{n|d})是枚举(n)的倍数,然后使用(d),那么我们不如变成(sum_{k=1}^{limit_{up}})枚举(d)(n)(k)倍,然后使用(d)变成使用(nk)
    • 当式子中(多半是分母)出现两个字母(id)相乘的时候,不妨设(T=id),然后把式子变成主要关于枚举(T)
    • 当式子中有东西可以变成整除分块,后面前缀和的部分不能在复杂度内处理完的时候,多半会用杜教筛,不妨试一试
    • (sum_{i=1}^nsum_{n|d})暴力求是(nlnn)的,而不是(n^2)
    • 式子中如果有(sum_{...}^{...}sum_{...}^{...}[...]),那么我们只需要枚举满足([...])的对数就可以了,其它的都是没有贡献的
    • 记住一些强大的公式,比如[洛谷 P3768 简单的数学题]中链接的那些

    这些套路可能直接说并不是很清楚,可以借助后文的例题去理解

    几道练习题

    这些都是我最近练习的题目,有些很经典,有些很近代

    大体上应该是按由易到难的顺序,而且题目之间可能会有关联,也会按顺序循序渐进地出现套路与方法

    所以建议按照给出的顺序观看

    注意函数的设计和式子的推法

    (点击链接,看具体内容)

    正好十道题,见证我初学莫比乌斯反演的历程

    从未结束

    从此,莫比乌斯反演的学习告一段落

    要开始学习其它的东西了,以追赶他人的步伐

    现在,继续努力!

  • 相关阅读:
    使用yum更新时不升级Linux内核的方法
    centos7 redmine安装过程(转载)
    CentOS7安装GitLab、汉化、邮箱配置及使用(转载)
    [bzoj2780][Spoj8093]Sevenk Love Oimaster_广义后缀自动机
    [bzoj2595][WC2008]游览计划/[bzoj5180][Baltic2016]Cities_斯坦纳树
    [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
    OI模板のpoke流[大型考试复习必备/kl]
    [bzoj2453]维护队列_带修改莫队
    [bzoj4519][Cqoi2016]不同的最小割_网络流_最小割_最小割树
    [bzoj3894]文理分科_网络流_最小割
  • 原文地址:https://www.cnblogs.com/hongyj/p/8584263.html
Copyright © 2011-2022 走看看