【总结】莫比乌斯反演

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

莫比乌斯反演是什么?

我也说不清

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

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

最基础的,两个式子

我们假设有两个函数\(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}^n\sum_{n|d}\)暴力求是\(nlnn\)的,而不是\(n^2\)
  • 式子中如果有\(\sum_{...}^{...}\sum_{...}^{...}[...]\),那么我们只需要枚举满足\([...]\)的对数就可以了,其它的都是没有贡献的
  • 记住一些强大的公式,比如[洛谷 P3768 简单的数学题]中链接的那些

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

几道练习题

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

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

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

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

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

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

从未结束

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

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

现在,继续努力!

posted @ 2018-03-16 19:17  HYJ_cnyali  阅读(254)  评论(2编辑  收藏  举报