狄利克雷卷积简介
卷积这名字听起来挺学究的,今天学了之后发现其实挺朴实hhh。
卷积:
“(n)”表示到n的一个范围。
设f,g是两个数论函数(也就是说,以自然数集为定义域的复数值函数),则卷积运算f∗g定义为
(f∗g)(n)=∑ij=nf(i)g(j)
另一种写法就是:
(f∗g)(n)=∑d∣nf(d)g(nd)
这里给一段数论函数的定义:
数论函数亦称算术函数,一类重要的函数,指定义在正整数集上的实值或复值函数,更一般地,也可把数论函数看做是某一整数集上定义的函数。
一些数论函数
首先最简单的就是常数函数,直接映射到一个正整数,比如f(x)=1,f(x)=2这样的。
再有就是一些整数域数列的通项公式函数,例如f(x)=x这样的。
还有就是ϕ(x)欧拉函数,表示因数个数。
另外就是元函数e,写成表达式就是e(x)=[x=1].
还有特殊的常数函数,把所有的数字映射成1的u(x)=1
莫比乌斯函数:通常,莫比乌斯函数μ定义为
μ(1)=1;
μ(n)=(−1)k如果n能写成k个不同素数之积;
μ(n)=0,其他情况。
以下参考如何证明莫比乌斯反演?by Syu Gau
一些简单性质
交换律
根据(f∗g)(n)=∑ij=nf(i)g(j)
这个定义,结论是显然的了。
结合律
只要证明(f∗g)∗h=f∗(g∗h)就可以了。
于是左边就是
((f∗g)∗h)(n)=∑lk=n(f∗g)(l)h(k)=∑lk=n⎛⎝∑ij=lf(i)g(j)⎞⎠h(k)=∑ijk=nf(i)g(j)h(k)(1)(2)(3)
右边是
(f∗(g∗h))(n)=∑il=nf(i)(g∗h)(l)=∑il=nf(i)⎛⎝∑jk=lg(j)h(k)⎞⎠=∑ijk=nf(i)g(j)h(k)(4)(5)(6)
得证。
加法的结合律
看不懂网上的证明,简单贴一下。
存在单位元ι 使得ι∗f=f
我们需要
(ι∗f)(n)=∑ij=nι(i)f(j)=f(n)
故不难猜到ι 应该定义为ι(n)= {1n=1 0n≠1
事实上,直接验证可得
(ι∗f)(n)=∑ij=nδi,1f(j)=f(n)
以上说明数论函数在卷积意义下构成一个交换群。
卷积差不多就这些。。。
莫比乌斯反演证明
μ函数的性质
为什么要发明这个函数呢,肯定是有道理的。
我们一般把μ看做是u(x)=1在卷积意义下的逆元。就是说它满足:
μ∗u=e
1就是函数f(n)=1。展开来写就是
∑d∣nμ(d)∗1
当 n=1时,显然成立。
当 n>1时,根据唯一分解定理我们可以把n拆成n=pk11∗pk22∗⋯∗pknn
当 ∃kx=1时,μ值肯定为0,所以我们把kx都看作1。
而d枚举的就是n的因子,其实就是在n的质因子集合里取走任意个。所以这个式子可以写成这个样子:
∑d∣nμ(d)=μ(1)+μ(p1)+μ(p2)+⋯+μ(pk)+μ(p1p2)+⋯+μ(p1p2⋯pk)=(k0)+(k1)(−1)+(k2)(−1)2+⋯+(kk)(−1)k=(1−1)k=0(7)(8)(9)
那么∑d∣nμ(d)=1就得证了。
反演形式1证明
法1
莫比乌斯反演形式1就是,如果f(n)=∑d∣ng(d),则g(n)=∑d∣nμ(nd)f(d)
写成卷积的形式就是,如果f=g∗e,则g=f∗μ。
这样写就比原来哪样要好记而且简介多了。
有了之前的铺垫,接下来就很容易了。
把原方程两边乘一个μ
f∗μ=g∗e∗μ
f∗μ=g∗(e∗μ)
由于之前有证明μ∗e=1所以就有f∗μ=g于是得证。
感觉这种方法非常巧妙啊。。
法2
听知乎上大佬讲的,莫比乌斯反演其实就是偏序集上的容斥,简单理解了一下大概是这样的。
我们知道容斥定理的公式是
g(S)=∑V⊂Sf(V)⟹f(S)=∑V⊂S(−1)∣S∣−∣V∣∗g(V)
用叉姐的话将就是:n 个坏事都不发生的概率,可以通过 2 n 个同时发生的概率计算,定义一个由数映射到它质因子集合的映射,映射关系显然是整除,V看做是S的质因子但不是V的质因子的乘积,那么莫比乌斯反演定理就和容斥的式子长得一模一样了。μ就是(−1)∣S∣−∣V∣
反演形式2证明
以后再填坑。。感觉效率好低QAQ
ϕ和μ的关系
有一个经典公式就是:
∑d∣nϕ(d)=n
这个公式怎么证明呢?
我们可以把它简记为
ϕ∗e=id
然后两边乘一个μ
ϕ∗(μ∗e)=id∗μ
ϕ=id∗μ
再化回来
ϕ(n)=∑d∣nμ(d)∗⌊nd⌋
μ只有在d质因数分解之后各个质因子个数为1的时候才有贡献,为奇数个因子的时候-,偶数为+,这不就是一个容斥求因子个数么。。于是左边等于右边,得证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话