莫比乌斯函数
Mobius 函数 μ(n) 的定义:设 n=pk11×pk22×⋯×pkmm,其中 n>1,且 pi 为素数,则其定义如下:
μ(n)=⎧⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪⎩1(n=1)(−1)kn=k∏i=1pi0otherwise
通俗理解:
① μ(n) 的定义域为 n∈N+;
② 规定:μ(1)=1;
③ 当 n 存在平方因子时,μ(n)=0;
④ 当 n 是一个素数或者为奇数个不同的素数之积时,μ(n)=−1;
⑤ 当 n 是偶数个不同素数之积时,μ(n)=1。
性质:
1、Mobius 函数是一个数论函数,同时也是一个积性函数。
2、当 n>0 时,有如下定理:
∑d|nμ(d)={1(n=1)0(n>1)
其证明如下:(用到了二项式定理的性质)
Ⅰ、当 n=1 时,显然等式成立!
Ⅱ、当 n>1 时,设 n=pk11×pk22×⋯×pkmm ,d=px11×px22×⋯×pxmm 。
根据 μ 的定义,只需考虑 xi=0 或者 xi=1 的情况。假设 d 中存在 r 个 xi=1,那么有
∑d|nμ(d)=μ(1)+μ(p1)+⋯+μ(pk)+μ(p1×p2)+⋯+μ(pm−1×pm)+⋯+μ(p1×p2×⋯×pm)=1+(m1)(−1)+(m2)(−1)2+⋯+(mm)(−1)m=m∑r=0(mr)(−1)r=0
根据二项式定理有:(x+y)n=∑nk=0(nk)xn−k×yk, 令 x=1,y=−1,
即可证得:∑mr=0(mr)(−1)r×1m−r=(1−1)m=0。
卷积运算形式:∵μ(n)∗I(n)=ϵ(n),其中 μ(n) 为莫比乌斯函数,I(n)=1 为恒等函数,ϵ(n)为元函数,ϵ(n)=[n==1],∴μ(n)∗I(n)=∑d|nμ(d)I(nd)=∑d|nμ(d)=[n==1],即证!
3、∀n∈N+,有 φ(n)n=∑d|nμ(d)d。利用卷积的性质来证明:∵φ(n)=μ(n)∗id(n)=∑d∣nμ(d)⋅id(nd)=∑d∣nμ(d)⋅nd,∴φ(n)n=∑d|nμ(d)d,即证!
备注:
a、若 f(n) 的定义域为正整数域,值域为复数,即:f:Z+→C,则称 f(n) 为数论函数。
b、若 f(n) 为数论函数,且 f(1)=1,对于互质的正整数 p,q,有 f(p⋅q)=f(p)⋅f(q),则称其为积性函数。
c、若 f(n) 为积性函数,且对于任意的正整数 p,q 都有 f(p⋅q)=f(p)⋅f(q) ,则称其为完全积性函数。
线性筛求莫比乌斯函数

1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long LL;
4
5 const int maxn = 1e5+5;
6
7 int cnt, prime[maxn], mu[maxn];
8 bool isp[maxn];
9
10 void Mobius() {
11 memset(isp, false, sizeof(isp));
12 memset(mu, 0, sizeof(mu));
13 memset(prime, 0, sizeof(prime));
14 isp[0] = isp[1] = true;
15 cnt = 0;
16 mu[1] = 1;
17 for(int i = 2; i < maxn; ++i) {
18 if(!isp[i]) prime[cnt++] = i, mu[i] = -1;
19 for(int j = 0; j < cnt && i * prime[j] < maxn; ++j) {
20 isp[i * prime[j]] = true;
21 if(i % prime[j] == 0) {
22 mu[i * prime[j]] = 0;
23 break;
24 }
25 mu[i * prime[j]] = - mu[i];
26 }
27 }
28 }
29
30 int main() {
31 // Test:
32 Mobius();
33 for(int i = 1; i <= 10; ++i) {
34 cout << "mu[" << i << "]:" << mu[i] << endl;
35 }
36 return 0;
37 }
View Code
证明如下:
设 p1 为 n 的最小素因子,n′=np1,在线性筛中,n 通过 n′×p1 被筛掉。
Ⅰ、当 n 为素数时,根据定义有显然有 μ(n)=−1;
Ⅱ、当 n′modp1=0 时,即其对应的指数 k1>1,由定义得 μ(n)=0;
Ⅲ、当 n′modp1≠0,即 k1=1,n′ 有 m−1 个素因子,接下来分2种情况讨论:
ⅰ、若 μ(n′)≠0,即 n′ 的所有素因子都只有一个,根据定义 μ(n)=(−1)m=(−1)m−1×(−1)=−μ(n′);
ⅱ、若 μ(n′)=0,说明 ∏mi=2ki>1,根据定义,显然有 μ(n)=0。
综合以上2小点, μ(n)=−μ(n′) 仍然成立。即证!
欧拉函数性质的补充及其证明
公式:n=∑d∣nφ(d)。
证明用到法里级数:法里级数 n 定义为分母不大于 n 的最简分数。
举个栗子:当分母 n=12 时,分子 1∼12 对应的最简分式依次为
112、16、14、13、512、12、712、23、34、56、1112、11。
观察以上最简分式可以发现分母都是 n=12 的因子 d={1,2,3,4,6,12},即 d∣n。
将以上最简分式分类可得:
①分母为1的最简分式有:11;⇒φ(1)=1。
②分母为2的最简分式有:12;⇒φ(2)=1。
③分母为3的最简分式有:13,23;⇒φ(3)=2。
④分母为4的最简分式有:14,34;⇒φ(4)=2。
⑤分母为6的最简分式有:16,56;⇒φ(6)=2。
⑥分母为12的最简分式有:112,512,712,1112;⇒φ(12)=4。
通过分类可以发现对于同一个作为分母的因子 d,其分子都是 d 内且与 d 互质的数,个数为 φ(d),显然 ∑d|nφ(d)=n。不难推导,对任意的 n∈N+,等式恒成立。
另一种证明方式:当 n>2 时,令 n=m∏i=1pkii,由于欧拉函数是积性函数,那么 φ(n)=m∏i=1φ(pkii),则
∑d∣nφ(d)=∑m∏i=1φ(pji),其中(0≤j≤ki)
将上式因式分解可得
m∏i=1(ki∑j=0φ(pji))=m∏i=1(1+ki∑j=1(pji−pj−1i))=m∏i=1(1+pi(pkii−1)pi−1−pkii−1pi−1)=m∏i=1(1+pkii(pi−1)−(pi−1)pi−1)=m∏i=1(1+pkii−1)=m∏i=1pkii=n□
卷积运算形式:∵id(n)=φ(n)∗I(n),其中 id(n)=n 为单位函数,I(n)=1 为恒等函数,∴id(n)=∑d∣nφ(d)I(nd)=∑d∣nφ(d)=n,即证!
备注:
法里数列(级数):数学上,n阶的法里数列是0和1之间最简分数的数列,由小至大排列,每个分数的分母不大于n。每个法里数列从0开始,至1结束,但有些人不把这两项包括进去。有时法里数列(sequence)也称为法里级数(series),严格来说这名字不正确,因为法里数列的项不会加起来。
整除分块
问:求 ∑ni=1⌊ni⌋,n≤1012?
解:冷静分析一下,通过暴力打表可以发现对于每一个 ⌊ni⌋ ,有若干个与其相同的值,这样相同的值组成一个块。对于每一个块,假设左端点值是 lt,那么右端点值为 ⌊n⌊nlt⌋⌋。于是,这个问题就可以在 O(√n) 的时间复杂度内轻松解决!
证明如下:
Ⅰ、⌊ni⌋ 最多有 2×√n 种取值。即整除分块的时间复杂度为 O(√n)。理由如下:
ⅰ、当 i≤√n,显然只有 √n 种取值;
ⅱ、当 i>√n 时,即 ni<√n,显然也只有 √n 种取值。
Ⅱ、假如 ⌊nlt⌋=⌊nrt⌋,那么 rt 的最大值为 ⌊n⌊nlt⌋⌋。理由如下:
设 ⌊nlt⌋=k,则有 k×lt+p=n,其中余数 p∈[0,lt);
若 ⌊nlt+d⌋=k,则有 k×(lt+d)+p′=n;其中余数 p′∈[0,lt+d)
联立上面2个等式可得 p′=p−kd;当 p′=0 时,dmax=⌊pk⌋;则有如下推导:
rt=lt+dmax=lt+⌊pk⌋=lt+⌊nmodlt⌊nlt⌋⌋=lt+⌊n−⌊nlt⌋×lt⌊nlt⌋⌋=⌊lt+n−⌊nlt⌋×lt⌊nlt⌋⌋=⌊⌊nlt⌋×lt⌊nlt⌋+n−⌊nlt⌋×lt⌊nlt⌋⌋=⌊n⌊nlt⌋⌋□
总结:通过以上证明可知每一个分块的区间为 [lt,⌊n⌊nlt⌋⌋]。如何edit code?设初始值 lt=1,每次令 rt=⌊n⌊nlt⌋⌋,将 (rt−lt+1)×⌊nlt⌋ 累加到答案中,然后令 lt=rt+1 继续遍历下一个分块即可。由性质Ⅰ可知这样的块数最多为 2√n 个,即时间复杂度为 O(√n)。即证!
Template code

1 LL Div_block(LL n) {
2 LL res = 0;
3 for(LL lt = 1, rt; lt <= n; lt = rt + 1) {
4 rt = n / (n / lt);
5 res += (rt - lt + 1) * (n / lt);
6 }
7 return res;
8 }
View Code
狄利克雷卷积
设 f(n)、g(n) 是两个数论函数,其 Dirichlet (狄利克雷)卷积也是一个数论函数,则卷积运算 f∗g 定义为:
(f∗g)(n)=∑d|n∧d>0f(d)g(nd)
简记为 (f∗g)(n)=f(n)∗g(n)。注意:卷积运算符为 ∗;而乘法运算为 × 或者 ⋅ 或者不写。
数论函数 f(n)与 g(n) 的狄利克雷卷积也可以表示为
(f∗g)(n)=∑ab=n∧a,b>0f(a)g(b)
卷积运算的性质:
Ⅰ、满足交换律:f∗g=g∗f。由定义显然得证!
Ⅱ、满足结合律:(f∗g)∗h=f∗(g∗h),证明如下:考察两边作用在参数 n 上,则
左边=((f∗g)∗h)(n)=∑mk=n(f∗g)(m)h(k)=∑mk=n(∑ij=mf(i)g(j))h(k)=∑ijk=nf(i)g(j)h(k)=f∗g∗h
右边=(f∗(g∗h))(n)=∑im=nf(i)(g∗h)(m)=∑im=nf(i)⎛⎝∑jk=mg(j)h(k)⎞⎠=∑ijk=nf(i)g(j)h(k)=f∗g∗h=左边□
Ⅲ、满足分配律:f∗(g+h)=f∗g+f∗h,证明如下:
f∗(g+h)(n)=∑mk=nf(m)(g+h)(k)=∑mk=nf(m)g(k)+∑mk=nf(m)h(k)=f∗g+f∗h□
Ⅳ、非常重要的几点:
若 f,g 均为积性函数,则 f∗g 也为积性函数;
若 g(n) 与 (f∗g)(n) 都是积性函数,则 f(n) 也是积性函数。
特别地,当 F=f∗μ 为积性函数时,f(n) 也是积性函数。
常见的积性函数
1、正约数个数函数 d(n): d(n)=∑i|n1;
卷积运算形式:d(n)=I(n)∗I(n)=∑d∣nI(d)I(nd)=∑d∣n1,其中恒等函数 I(n)=1。
2、正约数和函数 σ(n):σ(n)=∑d∣nd;
卷积运算形式:σ(n)=I(n)∗id(n)=∑d∣nI(d)id(nd)=∑d∣nid(d)I(nd)=∑d∣nd,其中单位函数 id(n)=n,恒等函数 I(n)=1。
3、欧拉函数 φ(n):φ(n)=∑ni=1[gcd(i,n)==1];
Ⅰ、欧拉函数 φ(n) 与恒等函数 I(n) 的卷积运算:id(n)=∑d|nφ(d)I(nd)=∑d|nφ(d)=n,简写为 id=φ∗I。其中 id(n)=n 为单位函数。
Ⅱ、单位函数 id(n) 与 莫比乌斯函数 μ(n) 的卷积运算:φ=id∗μ。
证明:id∗μ=φ∗I∗μ=φ∗ϵ=φ,即证!
4、莫比乌斯函数 μ(n):
μ(n)=⎧⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪⎩1(n=1)(−1)kn=k∏i=1pi0otherwise
莫比乌斯函数 μ(n) 与 恒等函数 I(n) 的卷积运算:这意味着 μ 和 I 在狄利克雷卷积下互为逆元。μ(n)∗I(n)=∑d∣nμ(d)I(nd)=∑d∣nμ(d)=ϵ(n)=[n==1],简写为 ϵ=μ∗I。
5、除数函数 σx(n):σx(n) 定义为n的正因数的x次幂之和,即为 σx(n)=∑d∣ndx。
推论Ⅰ:当 x=0 时,σ0(n)=d(n)=∑d∣n1;
推论Ⅱ、当 x=1 时,σ1(n)=σ(n)=∑d∣nd。
常见的完全积性函数
1、元函数:ϵ(n)=[n==1];任意数论函数卷上元函数都得原函数,如:ϵ∗f=f∗ϵ=f 等。证明如下:
ϵ(n)∗f(n)=∑d|nϵ(d)f(nd),当且仅当 d=1 时,ϵ(1)=1,其余情况下为0,则原式 =f(n),即证。
2、单位函数:id(n)=n;
3、恒等函数:I(n)=1;
4、幂函数:idk(n)=nk;其中 k 包括任何复数和实数。
卷积变换总结
卷上恒等函数 I 可得到不同的数论函数,反过来只需卷上恒等函数的逆元 μ 即可推出原来的数论函数。
μ∗I−→ϵ∗I−→I∗I−→dφ∗I−→id∗I−→σμ∗μ←−ϵ∗μ←−I∗μ←−dφ∗μ←−id∗μ←−σ
莫比乌斯反演
本质:容斥原理!
1、问题引入:先来看一个求和公式:F(n)=∑d∣nf(d),其中 F(n) 与 f(d) 有什么关系呢?举个栗子:当 n=8 时,依次展开 1∼8 个和式如下所示:
F(1)=f(1);
F(2)=f(1)+f(2);
F(3)=f(1)+f(3);
F(4)=f(1)+f(2)+f(4);
F(5)=f(1)+f(5);
F(6)=f(1)+f(2)+f(3)+f(6);
F(7)=f(1)+f(7);
F(8)=f(1)+f(2)+f(4)+f(8);
以上是用函数 f(d) 来表示 F(n),那么用函数 F(d) 来表示 f(n) 又是怎样的呢?
f(1)=F(1);
f(2)=F(2)−F(1);
f(3)=F(3)−F(1);
f(4)=F(4)−F(2);⇒F(1) 跑哪去了?
f(5)=F(5)−F(1);
f(6)=F(6)−F(3)−F(2)+F(1);
f(7)=F(7)−F(1);
f(8)=F(8)−F(4); ⇒F(2),F(1) 跑哪去了?
细细观察以上式子可以发现:
Ⅰ、若 n=p2,其中 p 为素数,那么 F(p)=f(1)+f(p),F(n)=F(p2)=f(1)+f(p)+f(p2),则 f(n)=F(p2)−F(p)。
Ⅱ、提出猜想:注意上面的 f(4) 和 f(8),为什么会缺少某些项?观察其余式子中各项的系数,要么是 +1,要么是 −1,而这些缺少的项前面的系数肯定为 0,自然地联想到这些项的系数跟莫比乌斯函数 μ(n) 相关,再枚举几个式子可以发现:对于每一项 F(d) 前面的系数值都等于 μ(nd) ,即容斥得来的。于是我们猜测 ∀n∈N+,都有 f(n)=∑d∣nμ(nd)F(d)=∑d∣nμ(d)F(nd),反过来同样能证明得到原和式。
Ⅲ、证明猜想:已知 F(n)=∑d∣nf(d)⇒F=f∗I,当且仅当 f(n)=∑d∣nμ(nd)F(d)⇒f=μ∗F,换句话说 F=f∗I⇔f=μ∗F,接下来利用狄利克雷卷积的性质证明这个等价原则:
①、F∗μ=f∗I∗μ=f∗(I∗μ)=f∗ϵ=f;
②、f∗I=μ∗F∗I=F∗(μ∗I)=F∗ϵ=F。即证!
用反演证明如下:①、有这么一个等式:∑d∣nf(d)=∑d∣nf(nd),显然,这只是改变求和顺序而已!②、
f(n)=∑d∣nμ(d)F(nd)⇒枚举d=∑d∣nμ(d)∑k∣ndf(k)=∑d∣nkμ(d)∑k∣nf(k)⇒枚举k=[nk==1]⋅∑k∣nf(k)⇒原理:∑d∣nμ(d)=[n==1]=[n==k]⋅∑k∣nf(k)=f(n)□
以上是一种叫约数反演,另一种是倍数反演。
2、问题引入:先来看一个和式:F(d)=∑d|nf(n),其中 F(d) 与 f(n) 有什么关系呢?举个栗子:假设上限 n=8 时,依次展开 1∼8 个和式如下所示:
F(1)=f(1)+f(2)+f(3)+f(4)+f(5)+f(6)+f(7)+f(8);
F(2)=f(2)+f(4)+f(6)+f(8);
F(3)=f(3)+f(6);
F(4)=f(4)+f(8);
F(5)=f(5);
F(6)=f(6);
F(7)=f(7);
F(8)=f(8);
以上是用 f(n) 来表示 F(d),那么用函数 F(n) 来表示 f(d) 又是怎样的呢?
f(1)=F(1)−F(2)−F(3)−F(5)+F(6)−F(7); ⇒F(4),F(8) 跑哪去了?
f(2)=F(2)−F(4)−F(6);⇒F(8) 跑哪去了?
f(3)=F(3)−F(6);
f(4)=F(4)−F(8);
f(5)=F(5);
f(6)=F(6);
f(7)=F(7);
f(8)=F(8);
Ⅰ、提出猜想:鉴于约数反演的规律:细细观察以上式子可以发现,每个式子中各项前面的系数要么是 +1,要么是 −1,而这些缺失项前面的系数肯定为0,自然地联想到这些项的系数跟莫比乌斯函数 μ(n) 相关,再枚举几个式子可以发现:对于每一项 F(n),其前面的系数为 μ(nd),即容斥得来的。于是我们猜测 ∀n∈N+,都有 f(d)=∑d∣nμ(nd)F(n)。
Ⅱ、证明猜想:用反演证明如下:令 k=nd, 则 n=k⋅d,注意:d∣n。
f(d)=∑d∣nμ(nd)F(n)=∞∑k=1μ(k)∑k⋅d∣Tf(T)⇒枚举k=∑k∣Tdμ(k)∑d∣Tf(T)⇒枚举T,且必须满足d∣T=[Td==1]⋅∑d∣Tf(T)⇒原理:∑d∣nμ(d)=[n==1]=[T==d]⋅∑d∣Tf(T)=f(d)□
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!