莫比乌斯反演与狄利克雷卷积

Orz _rqy , An_account , negiizhao , Elegia, Wkywkywky.

Wky 大师在我学习数论的过程中给予我相当多的帮助,感谢难以言表。

Rqy 姐姐的博客真的提供了很多归纳性、总结性、机械性都很强的技巧,从中真的学到很多。

特别鸣谢为我的自出题提供标程的 icyM3tra。(实话说这半年多只有鲍队来做我的题捏 QAQ)


我将这个博客分为两部分,前面的部分像是国内大部分教科书一样,把大部分相关的技巧知识全部归纳到一起,这样一是方便复习,二是希望入门者也可以从数学一些而非太过 OI 的角度入门莫反;后面的部分就是最纯粹的做题教程,我想尝试尽可能的给入门者缩减学习时间。

仅仅想学会如何做题可以直接跳到入门教程做题。

B 站录了大概四个多小时的 网课,讲了点最基础的证明。然后这个白板的内容就放在附录里了。感兴趣可以去看看。


对了,这是你没见过的船新版本!qwq(AD20230208.


更新:AD20231008.

icy 的标程更新的很 nb 了,我也看不懂是什么科技,有机会你们去问 icy 吧。

感觉 icy 以后可能也会出类似的东西,他写的东西肯定比我的更加详细且全面,包括更先进的科技也好,或者更加高度的理解也好,到时候我的这些就是些废话了。

icy 不写也会有其他人写的,只要那个人在某天变得很无聊。

将永久停止更新这个博文,除非我能活下来,但我大概不应该活下来,也没什么必要活下来。

没有意义的一团文字罢了,各位看个乐子吧。

一、基本定义

我们先定义数论函数:定义域为正整数,值域为一个数集的函数。

定义两个数论函数的狄利克雷卷积:

  • t=fg,则 t(n)=inf(i)g(ni)

狄利克雷卷积是满足交换律和结合律的。

我们再补充一个分配律:(f+g)h=fh+gh(这个很显然啊)。

以及一个逆元的求法:

  • 对于每个 f(1)0 的函数 f,都有 g 使 fg=ε

  • 定义 g(n)=1f(1)([n=1]in,i1f(i)g(ni))

  • 易知:inf(i)g(ni)=f(1)g(n)+in,i1f(i)g(ni)=[n=1]

补充结论:

  1. 两个积性函数的狄利克雷卷积是积性函数。

    证明:若 nm,且 anbm,则 ab,此时:

    t(nm)=dnmf(d)g(nmd)=abnmf(ab)g(nmab)=abnmf(a)g(na)f(b)g(mb)=(anf(a)g(na))(bnf(b)g(mb))=t(n)t(m)

  2. 积性函数的逆是积性函数(不考虑 f(1)=0)。

    证明:考虑对 nm 的大小进行归纳。

    • nm=1,则 g(1)=1,结论成立

    • 假设 nm>1,当 nm<nm 时有 g(nm)=g(n)g(m),欲证 nm 时满足命题:

      g(nm)=dnm,d1f(d)g(nmd)=an,bm,ab1f(a)f(b)g(na)g(mb)=f(1)f(1)g(n)g(m)an,bmf(a)f(b)g(na)g(mb)=g(n)g(m)(anf(a)g(na))(bmf(b)g(mb))=g(n)g(m)ε(n)ε(m)=g(n)g(m)

      这里 nmab<nm 可运用归纳条件。

    Q.E.D.

二、符号及常用结论

  1. 常用的几个符号:

    ε,这个函数是单位元,具体来说,除了 ε(1)=1,其余都为 0。(读法:epsilon,完全积性)

    id,字面意思就是 id(n)=n。(完全积性)

    σk,这个叫做除数函数,具体来说它是 σk(n)=dndk。(读法:sigma,积性)

    1,它就是黎曼函数。具体来说就是 1(n)=ζ(n)=1。(读法:zeta,完全积性)

    φμ 我就不多介绍了。

  2. 常用结论:

    • 莫比乌斯反演:

      [n=1]=dnμ(d)

      写成狄利克雷卷积就是:

      ε=1μ

    • 欧拉反演(然而没有这个名字,暂且可以这么称呼):

      n=dnφ(d)

      写成狄利克雷卷积就是:

      id=1φ

      其逆即为:

      idμ=φ

    • 约数函数有关卷积:

      σ0=11

      σ=id1

      σk=idk1

      以及一个:

      σ0(xy)=ixjy[gcd(i,j)=1]

      这个结论的扩展:

      σ0(xyz)=ixjykz[gcd(i,j)=1][gcd(j,k)=1][gcd(i,k)=1]

  3. 关于 lcm 卷积:

    h(n)=i=1nj=1nf(i)g(j)[lcm(i,j)=n]

    这个卷积等价于:

    h1=(f1)(g1)

    实际上只要知道:

    [lcm(i,j)n]=[in][jn]

    就可以推导了。。。

    这里 gcd 卷积没有太大的推导价值。。。因为大部分情况是会产生无限求和的状况的。。。

三、积性函数求法

通过线性筛求积性函数,一般有两种方法:

  1. 分类讨论这个东西:

    • f(1)=1
    • nP,f(n),这里 P 指质数集(并不知道初等数论中那个炫酷的符号是怎么打出来的)。
    • pn,p2n,f(n)=f(n/p)f(p)
    • pn,p2n,f(n),这里一般不同情况不同分析。
    • 经典的例子有一般的 μφ 的求法。
  2. 先算出 f 在素数幂的取值,对于每个 n 求出其最小质因数 pk 及 其次数 ck,直接 f(n)=f(pkck)f(n/pkck) 算就完了。这个次数可以递推求。

    当然素数幂处的取值也不一定很好求,反正不管怎样是要动脑子的。

  3. (从 EI 的知乎专栏看到的)现在我们来谈一谈一种特殊的情况 h=fg,其中 fg 都是积性函数。

    很容易知道 h 是积性函数。那么同理我们可以按照上面的方法 2 求取。

    那么很显然我们需要知道这个 hpk 的取值。

    容易知道:

    h(pk)=d=0kf(pd)g(pkd)

    那么我们在 pk 处计算 h 需要 Θ(k) 的复杂度。

    这一块的复杂度分析就是 EI 专栏的精华(但也是最傻的/tx)。

    我们考虑枚举 p 的指数 k,则 klog2n

    若我们指定 k,则使 pknp 只有 π(nx) 个。

    因此这个复杂度:

    T(n)=O(x=1log2nxπ(nx))=O(x=1log2nxnxlnnx)=O(1lnnx=1log2nx2nx)

    现在尝试寻找 x2nx 的极值:

    ddxx2nx=nx(2xlnn)

    可知原函数单峰下凸,在 x=1 时得 n

    用最大值作界得到:

    T(n)log2nlnnn=O(n)

    当然,数学明珠上的皇冠 Wky 大师直接给了一种更简明的方法:

    因为对于 k=1,一共有 π(n)p

    对于每个 k[2,log2n],最多只有 π(nk)<nkp

    那么 n 以内 pk 的个数就是 O(π(n)+nlog2n)=O(nlnn)(数量级可以通过相除比较)。

    那么总的计算复杂度 T(n)=O(nlog2nlnn)=O(n)

四、贝尔级数

这一块我也不太明白,也不怎么会用。

可以说是狄利克雷生成函数的一个较好替代品(看起来就要简洁许多),以至于我现在还不会狄利克雷生成函数。。。

讲解这个的主要是 rqy 和 cmd 的博客。

定义积性函数 fp 的贝尔级数为:

fp(x)=i=0f(pi)xi

这样的话根据积性函数的性质,狄利克雷卷积就变成了一般卷积:

(fg)p(x)=fp(x)gp(x)

加法形式也是有意义的,但是不是对应 (f+g),这点请一定要注意:

hp(x)=fp(x)+gp(x)

至于这玩意是什么,我只能最简单的解释一下,在素数幂处为两者函数值相加,其他数值处满足积性,这样的一个函数。减法当然也是同理。

求逆的话非常简单,若 fg=ε,则:

fp(x)gp(x)=1

虽然有这种有意义的运算,然而狄利克雷卷积上却没有除法(雾),所以一般写法就类似于 1=idφ1 这样子算了。

常见的封闭形式:

  1. εp(x)=1

  2. ζp(x)=11x

  3. idpk(x)=11pkx

  4. μp(x)=1x(μμ)p(x)=1+x

  5. σ0p(x)=1(1x)2

  6. φp(x)=1x1px

  7. (idμ)p(x)=1px

想要推导出来就仔细想一想 f(px) 等于什么,变成一个正常的 OGF,然后就会推了。

实在不会直接推导可以利用上面你已经理解的结论和自己知道的卷积来推导,比如 φp(x)=μp(x)idp(x)

或者说理解一下这个意义。。。我也没什么好方法。。。

点乘的话就是对应 xi 的系数相乘即可,很好理解。可惜没有什么贝尔级数上的初等运算可以对应。

一种特殊的点乘是数论函数 f 点乘上 idk,这种情况下我们是可以求出其贝尔级数的:

(fidk)p(x)=i=0f(pi)pkixi=i=0f(pi)(pkx)i

这个时候将 pkx 视作整体,代入 fp(x) 就好了。

比如:(φid2)p(x)=1p2x1p3x

然后 P3768 简单的数学题 就可以做了。

有关这个的习题似乎很难找(?)。

所以我自己造了一道:U214268 不老不死的竹林引路人。或许用狄利克雷生成函数会更简洁,但我不会。

或者去看 rqy 博客里的那道奇怪的题目(显然会比这一题难处理一些,而且好像复杂度是错的)。

这里把 rqy 的那个题讲一下:

f(pc)=pc+[c>0](1)c

求这个东西的前缀和。

可以知道:

fp(x)=11px+11+x1

这里的 g=(idμ)μ2 应该算得上是很简单的形式了……但这个 g 的前缀和求取必然是爆炸的,因为一定需要用杜教筛了。

然后 rqy 觉得整个的复杂度还是 O(n2/3) 的,这个事情动手算一算就知道肯定是错的……

所以造题目的时候就没有用 rqy 的这个题目,反是自己构造出来一道。


可能会存在狄利克雷生成函数能做而贝尔级数做不了的东西(只要出现一个非积性数论函数,并且这个东西需要有神奇的方法求值)(我会考虑在之后尝试造一道这样的入门题)。。。

会补充到下面的(咕咕咕)。

五、技巧总结

  1. 推式子,我只会:

    公式瞎套,换序求和,换元乱搞,创造互质(构造 [gcd(x,y)=1]),函数积性,函数求逆,提项合并,当场躺平

    不怕出事可以从一些底层意义上面自己创造一些式子。

  2. 关于如何理解莫比乌斯反演加速计算的本质:

    莫比乌斯反演的一种本质是数论容斥,实际上这个东西对加速计算本身没有什么帮助。

    真正加速计算的有两个:换序求和与数论分块。

    数论分块的加速效果想必不需要我多说。

    换序求和的加速实际上就是实现了对容斥集合的较优划分。

  3. 关于数论分块被使用的原因:

    题目里有 gcd,一般很容易扯到数论分块。

    原因就是 xgcd(i,j)xi,xj。于是就能涉及到整除,从而牵扯到数论分块。

  4. 定义运算 ,表示 (fg)(n)=f(n)g(n)

    很显然 1=ζ 是单位元啊。

    f 是完全积性的,有性质:

    (fg)(fh)=f(gh)

    除此我们一般的处理方法就是把它展开成一般的求和形式,然后使用普通的数学技巧化简。

    主要是用在杜教筛里的。

  5. 关于莫反的一个值域平衡技巧。

    P5572 就差不多了。

  6. 狄利克雷前缀和技巧。

    可以 O(nlnlnn)μ/ζ 变换及其反向变换,看 P5495 就可以了。

    当然还有一个 Magic 可以做到 O(n)。但我目前还没见到必须要用这个的。(rqy:群直积的卷积变换可分解成独立的卷积变换……)

    简单来说,做法是这样的:

    g(i,n)=dn,diμ(nd)f(d)

    然后就有:

    g(i,n)={g(i1,n)ping(i1,n)g(i1,n/pi)pin

    这个挺好理解的,最后我们要的就是 g(cnt,n)

六、高级筛法

还有一些是我想继续学习后补充到下面的,实际上就是几个高级筛法,但是复杂度会比较优秀。

有所耳闻的就是 PN 筛,Min_25 筛,zzt 筛。。。

把 negiizhao 的博客贴在 这里 备忘一下。

七、入门教程(应用)

以上都是一些比较结论性的东西。

想要训练的话可以跟着下面的入门。

题面自己搜啦。

建议初学者做例题的时候可以适当利用题解(或者说直接翻我觉得都没事,因为这个东西不学都能想到的话我觉得还挺有难度的)。

如果你只是想“学会”莫反,也就是时间比较紧张很难训练太多题目,可以按照例题顺序把例题做完即可。

如果你想要将莫反作为一个可以熟练掌握的知识点,我觉得只要把例题和对应练习做完就可以(对应练习的典型性回比后面的练习题组题目强一些)。

ABC 组练习题的目的是巩固与提高。

A 组是一些水题,难度和例题的对应练习保持一致,觉得 Trivial 可以直接跳过(简单来说你可以从这里找到信心)。

B 组放了一些稍微上了点难度的题,但总体来说仍然不难,想要巩固的话可以优先做这一组的题目,做完之后应该可以说有向上继续学习包括高级筛法还有特殊技巧的能力了。

C 组放了一些可能会让你眼前一亮的技巧(当然前提是你没有见过),目的是想让读者与更加有难度的莫反题目有衔接。难度其实说不上非常高。

OI 界的莫反实际非常有限,几乎可以说是众多知识点中最容易接触到边界的了,而且炫酷有趣,大部分人学习的过程应该是并不枯燥的(不像某些毒瘤数据结构天天就知道卡常卡常卡常)。

本篇仅是作为一个引导,如果读者对后面的知识仍然感兴趣,可以尝试把 Min_25 筛学掉,然后去洛谷的题单搜索莫比乌斯把里面的题目全部做掉,再加上几道 SPOJ 的题目,大概率应该就把全网的莫反题都杀爆了(比如著名的 Wky 大师等等)。


必备技能(例零):UVA11526 H(n)

这里就是数论分块的基本内容。

练习零:P2261 [CQOI2007]余数求和

  • 希望这个题能让读者明白一个转化套路,就是想办法往 i=1nn/i 上去靠,然后用数论分块

接下来正式进入莫比乌斯反演:

例一:P3455 [POI2007]ZAP-Queries

  • 这个题出现了几个常用技巧
  • 一个是转化出条件 [gcd(i,j)=1]
  • 另一个就是把 [gcd(i,j)=1] 这个条件换成 dgcd(i,j)μ(d)
  • 最后一个就是换序求和(这个是最重要的)
  • 区别于一般的反演做法,这种方法可能更适合入门
  • 想要做题的话掌握这种技巧就足够了
  • 有一道重题 P4450

练习一:P2522 [HAOI2011]Problem b

  • 和上面的题其实一样
  • 这里用到了容斥
  • 希望读者能够熟悉一下上面的推导

例二:P2398 GCD SUM

  • 这题需要的粗暴技巧是换元
  • 形象的来说,我们设了一个 T=kd,然后让枚举的条件通过整除限制地更紧
  • 通过这个方式来优化我们的复杂度
  • 同时希望读者提升观察能力,熟练运用常用结论
  • 这里的欧拉反演(随便起的名字,实际上就是 id=1φ)技巧一定要掌握
  • 希望读者熟悉一下刚才的技巧
  • 另外重题 P1390 公约数的和,不过稍微用一点容斥

练习二:P2257 YY的GCD

  • 希望读者熟悉一下刚才的换元技巧

练习三:P3327 [SDOI2015]约数个数和

  • 需要用到上面的某个结论
  • 只要看推导的式子就够了,杜教筛后面会讲(虽然这个题也没必要杜教筛)
  • 没有什么典型性,希望读者能知道数论题有时并不完全机械

练习四:P4318 完全平方数

  • 我们结合了二分答案的技巧
  • 主要是这个是否含平方因子与 μ2 之间的转化

练习五:CF1139D Steps to One

  • 期望与莫反结合的一道题

例五:P4213 【模板】杜教筛(Sum)

  • 这里我们来讲一个常用的杜教筛
  • 它的功用是帮助我们更快地求出数论函数的前缀和
  • 应该说是必备技能

练习五:P1829 [国家集训队]Crash的数字表格 / JZPTAB

  • 虽然可能不太适合做杜教筛的练习题(数据并没有卡死用杜教筛)
  • 但是可以做一下推导练习,用用贝尔级数也是好的

例六:P4917 天守阁的地板

  • 对于 的处理技巧
  • 将艾弗森括号置于指数位置即可
  • 指数的 可以变为底数的
  • 的可以将乘积项拆开再相乘

练习六:P3704 [SDOI2017]数字表格

  • 技巧的练习
  • 一个结构基本一样但是是 的题 P4449 于神之怒加强版,更加简单

例七:P5495 Direchlet 前缀和

  • 然后再说一点可能大家都知道不过没有那么敏感的东西,一个数论函数的 μ 变换和 ζ 变换都是可以 O(nlnlnn) 求出前 n 个函数值的(埃氏筛)
  • 而且不仅是前缀和,后缀和也是同样的

练习七:P2714 四元组统计

  • 一个小应用,是后缀和和后缀差分

练习题 A 组:

  1. 推导小练习

    i=1nj=1m[gcd(i,j)=k]

    i=1nj=1mf(gcd(i,j))

  2. P2260 [清华集训2012]模积和

    • 很简单的容斥
    • 数论分块练习
  3. P1891 疯狂 LCM

    • 简单的基础题
    • φ 推导似乎可用 Magic 做到 O(n) 处理
    • 但我还没想到机械的推导思路,所以这个暂时撇开不谈(
  4. P2424 约数和

    • 约数函数有关卷积的应用
  5. P6810 「MCOI-02」Convex Hull 凸包

    • 很水的一道练习题

练习题 B 组:

  1. P2158 [SDOI2008] 仪仗队

    • 先想办法找到要推的式子
    • 如果不会可以从互质切入
    • 对应练习 P1447 [NOI2010] 能量采集
  2. P3312 [SDOI2014]数表

    • 略略结合了一些数据结构
    • 也可以说是巩固基础的题了
  3. P6222 「P6156 简单题」加强版

    • 一般的推导题
    • 需要卡常
  4. P3768 简单的数学题

    • 比较简单的杜教筛题目
    • 基本上就是构造一下就会做了(或者应用贝尔级数/狄利克雷生成函数的技巧)
  5. U214268 不老不死的竹林引路人

    • 自己造的题目
    • 需要贝尔级数(知道这个这题就太简单了。。。)
    • 剩下就是简单的杜教筛模板
    • 高级筛法我不会
  6. P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题

    • 把式子推完就要做大模拟了
    • 请一定要耐心。。。
    • 真被常数卡住了就推个式子完事吧,别太较真
    • 另外,Cyj 出的莫反题基本都卡常什么的,我觉得很恶心,希望大家考试不要遇见这种连莫反(非筛法相关)都往死里卡常的神经病出题人

练习题 C 组:

  1. T168866 无聊的题目(rqy 起的名字捏)

    • 顺便补充一个 Wky 大师送我的 rqy 题。。。
    • 对于 n=i=1kpici,有关于 maxciminci 的二元函数 f(n)
    • 我们存在 O(nlogn) 的方法求出 i=1nf(i)
    • 这个方法用到了一点 PN 筛的技巧,同时还有一个容斥(我根本想不到)。
  2. P1587 [NOI2016] 循环之美

    • 一个按照素数幂分解 DFS 的小方法
    • 据说很像 Min_25 筛
  3. P4619 [SDOI2018]旧试题

    • 前面某道题目的扩展
    • 不太像正经数论题的处理方法
    • 反正我没做
  4. P5572 [CmdOI2019]简单的数论题

    • 一个值域平衡的技巧
    • 对应练习 P4240 毒瘤之神的考验

八、附录

LATEX 使用表:

  1. \mathrm{id} ^ 2 id2

  2. \zeta ζ

  3. \sigma _ 0 σ0

  4. \varphi φ

  5. \varepsilon ε

  6. \sqrt[x]{n} nx

B 站网课的 白板手输。里面有一些最基础的命题的证明,不过就是比较散乱了。

九、后记

笔者从 2022 年省选前就一路跌跌撞撞,最终落得一个休学的下场。

但倒是因为如此,慢慢才领悟到功利之空无,义无反顾地走上了开摆的道路。

其实也就是这样,才慢慢回味出原本的快乐,这篇博客就是我这快乐的一种体现。

功利地学习数学,或者像那种单纯为了追赶别人而学习数学,就是这样的人,我其实并不对他们抱什么特别的看法,毕竟我也是从那个样子走过来的。

但正是因为曾经从那里走过来,才会感觉那样学习数学真的很难体会到数学……至少对现在的我来说,少了许多许多的快乐。

我一直很认同维特根斯坦的观点——人生最重要的事就是消解无聊。毕竟人生的意义大抵还是在人生之外的,过完人生就好。而至于怎么过,我就更想开心一点过,所以我也更想去抓住每一个能让我快乐的事。

能把自己置于内卷之外,翻开一本数学书,好好地、安安静静、认认真真地去阅读每一个字,去理解每一个定义,明晰每一个推导,真的会比单纯地记忆结论+刷题更能去看到数学,也更能去体会那种数学的快乐。

本文算是我这种做法的一种体现吧。说实话,这也算是我的一种逆反,甚至可以说是朋克。我想对抗现在的这种潮流,去寻找一个我更喜欢的数学的模样。


本文的数学相关知识覆盖还算不错,但是知识的提高实际上还有很长的路。希望这篇博客的内容作为你从中的一个切入口,继续走向更加神秘的数学吧!

几个指向:

  1. 狄利克雷生成函数(级数)。

    其实不仅包括它能替代贝尔级数的一些功能,它本身如果作为生成函数去做一些工业就是很值得开发的地方(这个可以上网搜,cmd 的博客也有所介绍)。

    并且狄利克雷级数引向了一个更加庞大的数学分支——解析数论。感兴趣的同学可以上网了解。

  2. 伯努利数。

    虽然我从这里的指向可能还是做题(因为有几道莫反的题目会结合这一块的知识)。

  3. 更多的筛法。(不多说了)

  4. 其他的反演(容斥)。

    比如二项式反演,斯特林反演,Min_Max 反演,集合反演,单位根反演,有了莫反的基础,再去学习这些反演也是很不错的,而且能帮助理解反演的本质。

好了,就这么多。有缘再会!


大概不太可能再会了,我无法去清晰地言说那些神秘的事物,想来想去,还是不说为好。

数学确确实实带给我不少快乐,这不可否认,我的直觉和感觉都不否认。

但终究,摆在商品架上的死亡还是更吸引我,何况,无聊的琐事太多,这个世界的导演可能很喜欢拍烂片,因为总是烂片,我也觉得不大可能有什么精彩的桥段了。

至于数学,能在我活着的时间尽兴地这么学一次,尽管不多,但我已经满足了。

毕竟我平庸的天赋大概也不允许我触及到更深入的那些了,我能感觉到那个我不能理解的界限近在咫尺,虽然说不定花上几年几十年我会慢慢能够理解,但死亡对于我的吸引确实远远大于这些。

我或许想说的,更多的当然不应该在这里,不过即便写在这里,也不大有多少人能看到吧。

posted @   Aryper  阅读(127)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示