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

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

主要内容

  • 数论函数
  • 狄利克雷卷积
  • 积性函数
  • 莫比乌斯反演
  • 数论分块

数论函数

数论函数是一类定义域是正整数的函数,可以类比数列。

加法,数乘比较简单,略过。

狄利克雷卷积

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

h=fg 则:

h(n)=i|nf(i)g(ni)

  • 其具有交换律,结合律,分配律等,比较显然。

  • 有单位元 ϵ,有性质 ϵf=f。可以得出 ϵ=[n=1]

  • 逆元,对于 f(1)0,有一个 g 使得 fg=ϵ

如何求函数的逆元。

令:

g(n)=1f(1)([n=1]i|n,i1f(i)g(ni))

可以用方程求出 g

如此:

fg=f(1)g(n)+i|n,i1f(i)g(ni)=[n=1]=ϵ

积性函数

对于一个数论函数,如果有 ij 使得 f(ij)=f(i)f(j)

那么此函数成为积性函数

如果对于任意的 ij 都有 f(ij)=f(i)f(j) 那么其为完全积性函数

常见的积性函数有:

  • ϵ 解析式 ϵ(n)=[n=1]

  • idk 解析式 idk(n)=nk

特殊的 1(n)=id0(n)=1

  • ϕ 表示 [1,n] 中与其互质的数的个数。

  • σ0 表示因数个数。

它们的积性比较显然,不证。

记住两个结论:

  • 两个积性函数的狄利克雷卷积是积性函数

  • 积性函数的逆是积性函数

比较复杂,不打算证明了。

如何利用积性函数的结论,最简单的是,可以线性筛,因为我们线性筛的过程中顺便求出了其最小的质因子,可以利用积性解决函数的取值。

同时由于积性的性质,函数的取值实际上又其所有质数幂处的取值决定,对于这些取值,ϕσ0 都是比较好求的,所以可以用线性筛预处理。

给出质数幂处的公式:

ϕ(pk)=(p1)pk1σ0(pk)=k+1

一个重要性质。

尝试证明 ϕ1=id

(ϕ1)(n)=i|nϕ(i)=n

由于上文提及的狄利克雷卷积的性质,ϕ1 为积性函数,id 也为积性函数,所以只需要证明其在质数幂上相等即可。

显然有:

(ϕ1)(pk)=i=0kϕ(pi)=[i=1k(p1)pi1]+1=(i=1kpipi1)+1=pk=id(pk)

得证。

莫比乌斯反演

定义 1 的逆是 μ

如此,若 g=f1,那么就有 f=gμ

即若 g(n)=d|nf(d) 则,f(n)d|nμ(nd)g(d)

比如根据上文性质有 ϕ=μid

那么有 ϕ(n)=d|nμ(nd)d

又有 idk 的逆为 f(n)=nkμ(n)

我们可以算出

n=p1p2pk 其中 p 为不同的质数时,μ(n)=(1)k

否则,μ(n)=0

记住结论吧。

另一个方向上的莫比乌斯反演。

g(x)=n|df(d)

定义新操作

(fg)(x)=n|df(dn)g(d)

可以证明:

(fg)h=f(gh)

那么:

f=(μ1)f=μ(1f)=μg

所以:

f(n)=n|dμ(dn)g(d)

数论分块

浅谈。

经典问题是处理:

nif(i)

我们不难发现 ni 最多有 O(n) 个取值。

进行一个简单的说明。

i<n 时:i 的取值有 n 个。

i>n 时:ni<n 取值有 n 个。

考虑如何快速的求出所有 ni 的取值。

for(int i=1,j;i<=n;i=j+1){
j=n/(n/i);
}

证明自行百度,可以感性理解。

此处,既然我们已经求出了 [i,j] 中的数 ni 一致,我们可以把它们放在一起计算,对于 f 求一个前缀和即可。

对于多元的情况,我们也可以类似的处理。

例题

P1447 [NOI2010] 能量采集

首先定义:

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

故有:

F(n)=n|df(d)=nd×md

答案为:

ans=i=1nj=1mgcd(i,j)=d=1min(n,m)f(d)×d

莫比乌斯反演:

ans=d=1min(n,m)dd|kmin(n,m)μ(kd)F(k)=d=1min(n,m)dq=1min(n,m)dμ(q)×ndq×mdq

T=dq

=d=1min(n,m)dT=1min(n,m)[d|T]×μ(Td)×nT×mT=d=1min(n,m)d|Tmin(n,m)d×μ(Td)×nT×mT

更换 dT 的枚举顺序。

=T=1min(n,m)d|Tmin(n,m)d×μ(Td)×nT×mT=T=1min(n,m)nT×mTd|Tmin(n,m)d×μ(Td)

关注后面的部分:

h(T)=d|Td×μ(Td)

发现这是狄利克雷卷积的形式。

h=idμh1=idμ1h1=idϵh1=idϕ1=idh=ϕ

带回原来的式子。

ans=T=1min(n,m)nT×mT×ϕ(T)

数论分块即可。

参考代码

posted @   DeepSeaSpray  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示