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

大家好,我不会数学实锤了。

文章内容较杂,分章节叙述了的大部分有关内容。

为什么把这俩放一起?我不知道。

积性函数

积性函数:a,bab,如果一个函数 f 始终满足 f(ab)=f(a)f(b),则称 f(x) 为积性函数。

常见的积性函数:

d(x)=in1

σ(x)=ini

φ(x)=i=1x[gcd(x,i)=1](欧拉函数)

x=i=1kpiαipi 为质数。

μ(x)={1x=10max{αi}>1(1)kαi=1
(莫比乌斯函数)

f,g 为积性函数,则

  • h(x)=f(xp)
  • h(x)=fp(x)
  • h(x)=f(x)g(x)
  • h(x)=dxf(d)g(x/d)

h(x) 同为积性函数。

在处理莫比乌斯反演时,有时会要求出数论函数的前缀和,杜教筛可以用来快速处理此类问题。

狄利克雷卷积

有一个更好听的英文名字 Dirichlet 卷积

数论函数:定义域为正整数,陪域为复数的函数。数论函数中比较重要的运算法则为狄利克雷卷积。

可以发现数论函数是无限项的。

一个数论函数等于 0,当且仅当 f(x)=0

对于两个数论函数 f,g,它们狄利克雷卷积的结果 h 定义为:

h(x)=dxf(d)g(xd)=ab=xf(a)g(b)

可以简记为 h=fg

狄利克雷卷积和狄利克雷生成函数有较大联系,不过本文不做讨论。

狄利克雷满足以下性质(f,g,h 均为数论函数):

  • 交换律 fg=gf
  • 结合律 (fg)h=f(gh)
  • 分配律 (f+g)h=fh+gh
  • 数乘结合律 (xf)g=x(fg)xR

简要证明一下第四条性质:

证明:记 h=fg,右式 =xh

左式 =ab=nxf(a)g(b)=xab=nf(a)g(b)=xh= 右式

主要是一开始自己脑抽了一下没有想出来

其余均可自证不难。

单位元:单位函数 ε 是狄利克雷卷积中的单位元,对于任意数论函数 f(x)fε=f。据此可以求出 ε={1,0,0,0,}

零函数:0f=0

逆元:对于任意一个满足 f(x)0 的数论函数,如果有另一个数论函数 g(x),满足 fg=ε,则称 g(x)f(x) 的逆元。逆元是唯一的。

g(x) 的表达式为:

g(x)=ε(x)dx,d1f(d)g(xd)f(1)

接下来是一个重要结论:两个积性函数的狄利克雷卷积也是积性函数。

f,g 是积性函数,h=fg

gcd(a,b)=1,则:

h(a)=d1af(d1)g(ad1)

h(b)=d2bf(d2)g(bd2)

d=d1d2

h(a)h(b)=dabf(d)g(abd)=h(ab)

证毕。

由此我们有一个推论:积性函数的逆元也是积性的,证明留给读者思考。


莫比乌斯反演

前面我们提到了莫比乌斯函数,它也是个积性函数。这个函数还有如下性质:

dnμ(d)={1n=10n1

证明:令 n=i=1kpici,n=i=1kpi

由于含有平方项的因子 dμ(d)=0,因此 n=n

dnμ(d)=i=0k(1)i(ki)=(1+(1))k

因此当 k=0n=1 时答案为 1,否则为 0

注意到,这和 ε(n) 是相等的,μ1=ε

反演结论[gcd(i,j)=1]=dgcd(i,j)μ(d)

如果 gcd(i,j)=1μ(1)=1

如果 gcd(i,j)1dgcd(i,j)μ(d)=0

这个式子非常重要,强烈建议熟练背诵。

在上文,我们推导出了 μ 函数是积性函数,因此可以线性求。

莫比乌斯变换中有两个常见变换形式可以用来反演,这里浅作记录:

  • f(n)=dng(d),则 g(n)=dnμ(d)f(nd)

    f(n) 称为 g(n) 的莫比乌斯变换,g(n) 称为 f(n) 的莫比乌斯逆变换,也就是莫比乌斯反演。

    我们进行拆分,发现 f(n) 相当于是 g(n) 与常数函数 1 的狄利克雷卷积。

    现在尝试证明上面的式子

    证明:我们希望能把 μ(d) 的贡献单独拆出来,尝试代入 f(n)

    dnμ(d)f(nd)=dnμ(d)k(n/d)g(k)

    尝试按照 g(k) 的贡献求和,上式可以变成

    kng(k)d(n/k)μ(d)

    nk=1 时,g(k) 才有贡献,因此只有 n=k 时,原式存在贡献,故原式等价于 kn[k=n]g(k)=g(n)

    证毕。

  • f(n)=ndg(d),则 g(n)=ndμ(dn)f(d)

    证明:逆推等号右边

    ndμ(dn)f(d)=k=1μ(k)f(kn)=k=1μ(k)kndg(d)=ndg(d)k(d/n)μ(k)=ndg(d)ε(dn)

    第三行推导第四行的原因是,我们从求 kn 能贡献的 d,变成了对于一个 d,有多少 k 能贡献。

    上文的反演结论,其实对应着 ε(n)=dnμ(d),故第四行可以推出第五行。

    综上,当 d=n 时,右式才会有贡献,因此等于 g(n),证毕。


做一做

1. [HAOI2011]Problem b

i=abj=cd[gcd(i,j)=k]

多测,a,b,c,d,k 给定。

首先经典容斥,记 f(i,j)=[gcd(i,j)=k]

i=abj=cdf(i,j)=i=1bj=1df(i,j)i=1bj=1c1f(i,j)i=1a1j=1df(i,j)+i=1a1j=1c1f(i,j)

i=1nj=1m[gcd(i,j)=k] 转化一下

i=1n/ki=1m/k[gcd(i,j)=1]

由反演结论

i=1n/ki=1m/kdgcd(i,j)μ(d)

发现我们的时间复杂度并没有降低,考虑变化求和顺序,我们枚举 d,那么 i,j 都是 d 的倍数,发现可以将原式化为

d=1μ(d)i=1n/k[di]i=1m/k[dj]

由下取整的性质可知,1nkd 的倍数有 nkd 个,故原式等于

d=1min(n/k,m/k)μ(d)nkdmkd

可以用数论分块方式在根号时间解决。

预处理复杂度 O(n)

2. LCMSUM

i=1nlcm(i,n)

多测 T3×105,n106

根据小学奥数知识 lcm(x,y)=xygcd(x,y)

原式即

i=1ningcd(i,n)

有一个数学中常用trick,将原式复制一份并倒序,提出 i=n

12(i=1n1ingcd(i,n)+i=1n1(ni)ngcd(ni,n))+n

由辗转相除可得 gcd(a,b)=gcd(ba,b),分母可以合并,原式即

12i=1n1n2gcd(i,n)+n

n 提回来

12i=1nn2gcd(i,n)+n2

那么问题变成了根号或 O(1) 求解 i=1nn2gcd(i,n)

有一个想法是,设 d=gcd(i,n),枚举 d,此时 gcd(id,nd)=1

统计与小于一个数且和这个数互质的函数当然学过——欧拉函数。

所以 gcd(i,n)=d 的数有 φ(d) 个。原式可以转换为

12dnφ(n/d)n2d+n2

考虑想办法将式子套出积性函数的样子,设 d=nd,原式即

12n(dn(dφ(d))+1)

g(x)=dxdφ(d)f1(x)=x 为积性函数,f2(x)=φ(x) 为积性函数,那么 f1(x)f2(x) 是积性函数,dxf1(d)f2(d) 可以看作是 h(x)=1f1f2 的狄利克雷卷积。上文我们已经论证了两个积性函数的狄利克雷卷积仍然是积性函数,所以 g(x) 是积性函数。

积性函数可以在线性时间内完成推导,这里给出推导过程:

P 是素数集

g(pik) 的值很容易表示,因为约数集确定在 pi0,pi1,,pik

g(pik)=w=0kpiwφ(piw)

φ(piw)=piw1(pi1) 可以想象成将 piw 分成 piw1 个段,每个段的最后一个显然是 pi 的倍数。

所以 g(pik)=pi2w1(pi1)

根据这上述式子,我们尝试将 g(pik+1) 表示出来

g(pik+1)=w=0k+1piwφ(piw) =w=0kpiwφ(piw)+pik+1φ(pik+1) =g(pik)+pi2k+1(pi1)

考虑线性筛中的下一个步骤,枚举 ipj

如果 ipj 互质,这是朴素的。

接下来考虑 pji 的情况,令 i=kpjw(gcd(k,pj)=1)

g(ipj)=g(k)g(pjw+1)g(i)=g(k)g(pjw)g(ipj)=g(k)g(pjw1)

g(ipj)g(i)=g(k)(g(pjw+1)g(pjw)) =g(k)pj2w+1(pj1)(1)

同理

g(i)g(ipj)=g(k)pj2w1(pj1)(2)

所以将 (2) 式代入 (1)

g(ipj)=g(i)+(g(i)g(ipj))pj2

预处理时间复杂度 O(n),每个询问 O(1) 回答。

3. UOJ #62 怎样跑得更快

j=1ngcd(i,j)clcm(i,j)dxjbi(modp)

n,c,d 给定,p=998244353,多测给出 bi,求 xi

f(i,j)=gcd(i,j)lcm(i,j)

有一个很好的思考方向,我们将线性方程组写成矩阵形式:

[f(1,1)f(1,2)f(2,1)][x1x2]=[b1b2]

暴力求解,时间复杂度 O(n3q)

当然你发现可以直接将 F 的逆矩阵处理出来每组询问直接乘 B 即可。

时间复杂度 O(n3+qn2)

接下来考虑正解,以下等号均看作模 p 意义下。

朴素地拆开 lcm,原式转化为

j=1ngcd(i,j)cdidjdxj=bi

改写式子

j=1nf(gcd(i,j))g(i)h(j)xj=bi

f(x)=dxf(d),由莫比乌斯反演可知

f(x)=dxf(d)μ(xd)

我们求 f(x),这是 O(nlogn) 的。

在实现的时候,有一个更好的式子,f(x)=f(x)dndnf(x),这个式子容斥可得。

回到原式,可以将 gcd 拆掉,整个式子变成

j=1ndgcd(i,j)f(d)g(i)h(j)xj=bi

移项

dif(d)j=1n[dj]h(j)xj=big(i)

发现后一个 中只与 d 有关,考虑记为 rd,设 z(i)=bi/g(i),式子变成

dif(d)rd=z(i)

z(i) 已知,根据莫比乌斯反演,f(i)ri=diμ(d)z(id)

f(x) 可求,自然 rx 可求。

接下来是一些细节,考虑到有除法,但 g(i)h(i) 都不是 p 的倍数。

如果是 f(x) 没有逆元:

  • f(x)rx0 此时无解
  • f(x)rx=0 此时有多组解,随意给 rx 赋值即可。

后记

因为笔者不精通数学,所以部分叙述和证明来自 oi-wiki,在此感谢 oi-wiki 的贡献者们!

posted @   MisterRabbit  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示