莫比乌斯知识点整理

莫比乌斯函数

Mobius 函数 μ(n) 的定义:设 n=p1k1×p2k2××pmkm,其中 n>1,且 pi 为素数,则其定义如下:

μ(n)={1(n=1)(1)kn=i=1kpi0otherwise

通俗理解:

μ(n) 的定义域为 nN+
② 规定:μ(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=p1k1×p2k2××pmkmd=p1x1×p2x2××pmxm
根据 μ 的定义,只需考虑 xi=0 或者 xi=1 的情况。假设 d 中存在 rxi=1,那么有

d|nμ(d)=μ(1)+μ(p1)++μ(pk)+μ(p1×p2)++μ(pm1×pm)++μ(p1×p2××pm)=1+(m1)(1)+(m2)(1)2++(mm)(1)m=r=0m(mr)(1)r=0

根据二项式定理有:(x+y)n=k=0n(nk)xnk×yk, 令 x=1,y=1
即可证得:r=0m(mr)(1)r×1mr=(11)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、nN+,有 φ(n)n=d|nμ(d)d。利用卷积的性质来证明:φ(n)=μ(n)id(n)=dnμ(d)id(nd)=dnμ(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(pq)=f(p)f(q),则称其为积性函数。
c、若 f(n) 为积性函数,且对于任意的正整数 p,q 都有 f(pq)=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
复制代码

证明如下:
p1n 的最小素因子,n=np1,在线性筛中,n 通过 n×p1 被筛掉。
Ⅰ、当 n 为素数时,根据定义有显然有 μ(n)=1
Ⅱ、当 nmodp1=0 时,即其对应的指数 k1>1,由定义得 μ(n)=0
Ⅲ、当 nmodp10,即 k1=1nm1 个素因子,接下来分2种情况讨论:
ⅰ、若 μ(n)0,即 n 的所有素因子都只有一个,根据定义 μ(n)=(1)m=(1)m1×(1)=μ(n)
ⅱ、若 μ(n)=0,说明 i=2mki>1,根据定义,显然有 μ(n)=0
综合以上2小点, μ(n)=μ(n) 仍然成立。即证!

欧拉函数性质的补充及其证明

公式:n=dnφ(d)
证明用到法里级数:法里级数 n 定义为分母不大于 n 的最简分数。
举个栗子:当分母 n=12 时,分子 112 对应的最简分式依次为
11216141351212712233456111211
观察以上最简分式可以发现分母都是 n=12 的因子 d={1,2,3,4,6,12},即 dn
将以上最简分式分类可得:
①分母为1的最简分式有:11φ(1)=1
②分母为2的最简分式有:12φ(2)=1
③分母为3的最简分式有:1323φ(3)=2
④分母为4的最简分式有:1434φ(4)=2
⑤分母为6的最简分式有:1656φ(6)=2
⑥分母为12的最简分式有:1125127121112φ(12)=4
通过分类可以发现对于同一个作为分母的因子 d,其分子都是 d 内且与 d 互质的数,个数为 φ(d),显然 d|nφ(d)=n。不难推导,对任意的 nN+,等式恒成立。
另一种证明方式:当 n>2 时,令 n=i=1mpiki,由于欧拉函数是积性函数,那么 φ(n)=i=1mφ(piki),则

dnφ(d)=i=1mφ(pij)(0jki)

将上式因式分解可得

i=1m(j=0kiφ(pij))=i=1m(1+j=1ki(pijpij1))=i=1m(1+pi(piki1)pi1piki1pi1)=i=1m(1+piki(pi1)(pi1)pi1)=i=1m(1+piki1)=i=1mpiki=n

卷积运算形式:id(n)=φ(n)I(n),其中 id(n)=n 为单位函数,I(n)=1 为恒等函数,id(n)=dnφ(d)I(nd)=dnφ(d)=n,即证!

备注:

法里数列(级数):数学上,n阶的法里数列是0和1之间最简分数的数列,由小至大排列,每个分数的分母不大于n。每个法里数列从0开始,至1结束,但有些人不把这两项包括进去。有时法里数列(sequence)也称为法里级数(series),严格来说这名字不正确,因为法里数列的项不会加起来。

整除分块

问:求 i=1nnin1012
解:冷静分析一下,通过暴力打表可以发现对于每一个 ni ,有若干个与其相同的值,这样相同的值组成一个块。对于每一个块,假设左端点值是 lt,那么右端点值为 nnlt。于是,这个问题就可以在 O(n) 的时间复杂度内轻松解决!
证明如下:
Ⅰ、ni 最多有 2×n 种取值。即整除分块的时间复杂度为 O(n)。理由如下:
ⅰ、当 in,显然只有 n 种取值;
ⅱ、当 i>n 时,即 ni<n,显然也只有 n 种取值。
Ⅱ、假如 nlt=nrt,那么 rt 的最大值为 nnlt。理由如下:
nlt=k,则有 k×lt+p=n,其中余数 p[0,lt)
nlt+d=k,则有 k×(lt+d)+p=n;其中余数 p[0,lt+d)
联立上面2个等式可得 p=pkd;当 p=0 时,dmax=pk;则有如下推导:

rt=lt+dmax=lt+pk=lt+nmodltnlt=lt+nnlt×ltnlt=lt+nnlt×ltnlt=nlt×ltnlt+nnlt×ltnlt=nnlt

总结:通过以上证明可知每一个分块的区间为 [lt,nnlt]。如何edit code?设初始值 lt=1,每次令 rt=nnlt,将 (rtlt+1)×nlt 累加到答案中,然后令 lt=rt+1 继续遍历下一个分块即可。由性质Ⅰ可知这样的块数最多为 2n 个,即时间复杂度为 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 (狄利克雷)卷积也是一个数论函数,则卷积运算 fg 定义为:

(fg)(n)=d|nd>0f(d)g(nd)

简记为 (fg)(n)=f(n)g(n)。注意:卷积运算符为 ;而乘法运算为 × 或者 或者不写。
数论函数 f(n)g(n) 的狄利克雷卷积也可以表示为

(fg)(n)=ab=na,b>0f(a)g(b)

卷积运算的性质:

Ⅰ、满足交换律:fg=gf。由定义显然得证!
Ⅱ、满足结合律:(fg)h=f(gh),证明如下:考察两边作用在参数 n 上,则

=((fg)h)(n)=mk=n(fg)(m)h(k)=mk=n(ij=mf(i)g(j))h(k)=ijk=nf(i)g(j)h(k)=fgh

=(f(gh))(n)=im=nf(i)(gh)(m)=im=nf(i)(jk=mg(j)h(k))=ijk=nf(i)g(j)h(k)=fgh=

 Ⅲ、满足分配律:f(g+h)=fg+fh,证明如下:

f(g+h)(n)=mk=nf(m)(g+h)(k)=mk=nf(m)g(k)+mk=nf(m)h(k)=fg+fh

Ⅳ、非常重要的几点:
f,g 均为积性函数,则 fg 也为积性函数;
g(n)(fg)(n) 都是积性函数,则 f(n) 也是积性函数。
特别地,当 F=fμ 为积性函数时,f(n) 也是积性函数。

常见的积性函数

1、正约数个数函数 d(n)d(n)=i|n1
卷积运算形式:d(n)=I(n)I(n)=dnI(d)I(nd)=dn1,其中恒等函数 I(n)=1

2、正约数和函数 σ(n)σ(n)=dnd

卷积运算形式:σ(n)=I(n)id(n)=dnI(d)id(nd)=dnid(d)I(nd)=dnd,其中单位函数 id(n)=n,恒等函数 I(n)=1

3、欧拉函数 φ(n)φ(n)=i=1n[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=i=1kpi0otherwise

莫比乌斯函数 μ(n) 与 恒等函数 I(n) 的卷积运算:这意味着 μI 在狄利克雷卷积下互为逆元μ(n)I(n)=dnμ(d)I(nd)=dnμ(d)=ϵ(n)=[n==1],简写为 ϵ=μI

5、除数函数 σx(n)σx(n) 定义为n的正因数的x次幂之和,即为 σx(n)=dndx
推论Ⅰ:当 x=0 时,σ0(n)=d(n)=dn1
推论Ⅱ、当 x=1 时,σ1(n)=σ(n)=dnd

常见的完全积性函数

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ϵIIIdφIidIσμμϵμIμdφμidμσ

莫比乌斯反演

本质:容斥原理!
1、问题引入:先来看一个求和公式:F(n)=dnf(d),其中 F(n)f(d) 有什么关系呢?举个栗子:当 n=8 时,依次展开 18 个和式如下所示:
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) ,即容斥得来的。于是我们猜测 nN+,都有 f(n)=dnμ(nd)F(d)=dnμ(d)F(nd),反过来同样能证明得到原和式。
Ⅲ、证明猜想:已知 F(n)=dnf(d)F=fI,当且仅当 f(n)=dnμ(nd)F(d)f=μF,换句话说 F=fIf=μF,接下来利用狄利克雷卷积的性质证明这个等价原则:
①、Fμ=fIμ=f(Iμ)=fϵ=f
②、fI=μFI=F(μI)=Fϵ=F。即证!
用反演证明如下:①、有这么一个等式:dnf(d)=dnf(nd),显然,这只是改变求和顺序而已!②、

f(n)=dnμ(d)F(nd)d=dnμ(d)kndf(k)=dnkμ(d)knf(k)k=[nk==1]knf(k)dnμ(d)=[n==1]=[n==k]knf(k)=f(n)

以上是一种叫约数反演,另一种是倍数反演。
2、问题引入:先来看一个和式:F(d)=d|nf(n),其中 F(d)f(n) 有什么关系呢?举个栗子:假设上限 n=8 时,依次展开 18 个和式如下所示:
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),即容斥得来的。于是我们猜测 nN+,都有 f(d)=dnμ(nd)F(n)
Ⅱ、证明猜想:用反演证明如下:令 k=nd, 则 n=kd,注意:dn

f(d)=dnμ(nd)F(n)=k=1μ(k)kdTf(T)k=kTdμ(k)dTf(T)TdT=[Td==1]dTf(T)dnμ(d)=[n==1]=[T==d]dTf(T)=f(d)

 

posted @   霜雪千年  阅读(1720)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示