积性函数
定义
若 gcd(x,y)=1 且 f(xy)=f(x)f(y),则 f(n) 为积性函数。
性质
若 f(x),g(x)均为积性函数,则以下函数也为积性函数:
h(x)=f(xp)h(x)=fp(x)h(x)=f(x)g(x)h(x)=∑d∣xf(d)g(xd)
常见积性函数
- 单位函数 e(n)=[n=1]。
- 幂函数 Idk(n)=nk, id1(n) 通常简记为id(n)。
- 常数函数 1(n)=1。
- 因数个数 d(n)=∑d∣n1。
- 除数函数 σk(n)=∑d∣ndk。
k=1 时为因数和函数,通常简记为 σ(n)。
k=0 时为因数个数函数 σ0(n)。
- 欧拉函数 φ(n)=n∑i=1[gcd(i,n)=1]。
- 莫比乌斯函数 μ(n)=⎧⎨⎩1n=10n 含有平方因子(−1)kk为 n 的本质不同质因子个数
不是很懂上面写的什么玩意?
不用深究,有个印象继续往下看就好。
莫比乌斯函数
定义
μ 为莫比乌斯函数,定义为
μ(n)=⎧⎨⎩1n=10n 含有平方因子(−1)kk为 n 的本质不同质因子个数
解释
令 n=k∏i=1pcii,其中pi为质因子,ci≥1。
- n=1时,μ(n)=1。
- n≠1时 ,
- ∃i∈[1,k],ci>1 时,μ(n)=0。
当某质因子出现次数大于1时,μ(n)=0。
- ∀i∈[1,k],ci=1 时,μ(n)=(−1)k。
当每个质因子只出现一次时,即n=k∏i=1pi,{pi}中元素唯一。
μ(n)=(−1)k,此处k为质因子的种类数。
性质
莫比乌斯函数是积性函数,且具有以下性质
∑d∣nμ(d)=[n=1]
证明,设 n=k∏i=1pcii,n′=k∏i=1pi。
- 根据莫比乌斯函数定义,则有:∑d∣nμ(d)=∑d∣n′μ(d)。
- 若 n′ 的某因子 d,有 μ(d)=(−1)i,则它由 i 个 本质不同的质因子组成。
由于质因子总数为 k,满足上式的因子数为 Cik。
- 对于原求和式,转为枚举 μ(d) 的值。
则 ∑d∣n′μ(d)=k∑i=0Cik×(−1)i=k∑i=0Cik×(−1)i×1k−i
根据二项式定理,上式 =(1+(−1))k,
易知该式在 k=0,即 n=0 时为 1,否则为 0。
补充结论
反演结论:
[gcd(i,j)=1]⟺∑d∣gcd(i,j)μ(d)
证明 1:
设 n=gcd(i,j),则右=∑d∣nμ(d)=[n=1]=[gcd(i,j)=1]= 左。
证明 2:
暴力展开:[gcd(i,j)=1]=e(gcd(i,j))=∑d∣gcd(i,j)μ(d)
线性筛求莫比乌斯函数
μ 为积性函数,因此可以线性筛莫比乌斯函数。
复制复制 | int cnt, Mobius[kMaxn], Prime[kMaxn]; |
| bool vis[kMaxn]; |
| |
| void GetMobius() { |
| Mobius[1] = 1; |
| for (int i = 2; i <= n; i ++) { |
| if (!vis[i]) Mobius[i] = - 1, Prime[++ cnt] = i; |
| for (int j = 1; j <= cnt && i * Prime[j] <= n; j ++) { |
| vis[i * Prime[j]] = true; |
| if (i % Prime[j] == 0) break; |
| Mobius[i * Prime[j]] = - Mobius[i]; |
| } |
| } |
| } |
狄利克雷(Dirichlet)卷积
建议阅读 算法学习笔记(35): 狄利克雷卷积 By: Pecco。
定义两个数论函数 f,g 的狄利克雷卷积为
(f∗g)(n)=∑d∣nf(d)g(nd)
性质
- 显然满足 交换律,结合律,分配律。
- f∗g=g∗f
- (f∗g)∗h=f∗(g∗h)
- f∗(g+h)=f∗g+f∗h
- e 为狄利克雷卷积的单位元,有(f∗e)(n)=f(n)。
- 若 f,g 为积性函数,则 f∗g 为积性函数。
关于单位元 e
有:
e=μ∗1=∑d∣nμ(d)
证明
(f∗e)(n)=∑d∣nf(d)e(nd)=∑d∣nf(d)[nd=1]
- 对于[nd=1],当且仅当 nd=1,即 d=n 时为 1,否则为0。
- 则当 d=n 时,f(d)[nd=1]=f(n)。
当 d≠n 时,f(d)[nd=1]=0。
综上,(f∗e)(n)=∑d∣nf(d)[nd=1]=f(n),满足单位元的性质。
则 e=μ∗1 成立。
除数函数与幂函数
幂函数 Idk(n)=nk。
除数函数 σk(n)=∑d∣ndk。
显然有:
(Idk∗1)(n)=∑d∣nIdk(d)=∑d∣ndk=σk
当 k=0 时,Id0=1,σ0 为因数个数函数,有:
(1∗1)(n)=∑d∣n1=σ0
欧拉函数与恒等函数
φ∗1=Idφ=Id∗μ
对于一式,当 n=pm 时(p 为质数),有:
(φ∗1)(pm)=∑d∣nφ(d)=φ(1)+m∑i=1φ(pi)=1+m∑i=1(pi−pi−1)=pm
pi 的因子有 pi−1 个,为 1∼pi−1,故 φ(pi)=pi−pi−1。
又 (φ∗1)(n) 为积性函数,则对于任意正整数 n,有:
(φ∗1)(n)=(φ∗1)(∏pm)=∏(φ∗1)(pm)=∏pm=n
得证。
对于 2 式,在 1 式基础上两侧同时 ∗μ 即得。
左侧变为 φ∗1∗μ=φ∗e=φ。
写在最后
算法学习笔记(35): 狄利克雷卷积 By: Pecco
希望人没事
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】