莫比乌斯函数|莫比乌斯反演
(不要问我为什么没有导言了……)
(当然不仅会讲莫比乌斯函数,也会讲一些其他的)
一些准备
-
一定的数论基础(起码你知道一些基础的数论)
-
一定的代码实现能力(因为数论题代码不会很长因此能写代码就好)
-
大量的脑细胞并秃头的准备(
大雾 -
一定的智商和理解能力(数学不好的先去补文化课)
-
当然还有计算能力(数论题不动手算那怎么行)
-
更重要的是你基础算法都会了
接下来我主要会按照特定的顺序讲,以便读者观看流畅(顺滑到底)
请耐心的一章一章看下去,否则你会看不懂(当然巨佬会了下面的知识就可以跳过往后看)
整除分块(数论分块)
先咕着吧……(要不这么简单你们自行百度就好了)
积性函数与线性筛
首先你要会线性筛质数(不会度娘吧)
什么是积性函数
其实积性函数的定义很简单,积性肯定根积有关,它是定义在正整数域上的,满足:
(其中 ((x,y)) 表示 (x,y) 的最大公约数)
这样的函数 (f(x)) 即为积性函数。
当然有的时候不需要 ((x,y)=1) 即可满足 (f(x×y)=f(x)×f(y)),那么这个函数就是完全积性函数。
也即 (forall {x,y}) 有 (f(x×y)=f(x)×f(y)) 成立的函数为完全积性函数。
积性函数举例
下面当然不会列举出全部的积性函数,我们只讲接下来会用到的函数。
1、 (phi(n)),即欧拉函数,定义为小于等于 (n) 的正整数与 (n) 互质的数个数。且 (phi(1)=1)。
2、 (mu(n)),即莫比乌斯函数,对 (n) 进行唯一分解,即 (n=p_1^{c_1}p_2^{c_2}…p_m^{c_m}),则:
3、 (epsilon(n)),这个函数的定义是这样的:
如果你不认识它,那么说起它的另一个名字你可能更熟悉:狄利克雷卷积的乘法单位。
4、 ( ext{1}(n)),即常数函数,有 ( ext{1}(n)=1)。
*欧拉函数性质相关
首先规定一个正整数 (N) 的唯一分解:(N=displaystyleprod^{m}_{i=1}p_{i}^{c_i}, p∈primes)。
( ext{Lemma 1:}) (phi(N)=N×displaystyleprod^{m}_{i=1}(1-frac{1}{p_i}))
证明:(数学归纳法)
当 (N) 只有一个质因子时显然成立。
接下来考虑 (N) 只有两个质因子的情况:
设 (p) 是 (N) 的一个质因子,而 (q) 也是 (N) 的一个质因子。那么在 (1~N) 中 (p) 的倍数有 ({p,2p,3p,…,(N/p)*p}) 共 (N/p) 个(除法下取整);同理,(q) 的倍数也有 (N/q) (下取整)个。显然这些数都是不满足条件的数(即不满足 (gcd(n,i)=1(1<i<N))),我们考虑去掉这 (N/p+N/q) 个数,但是 (p×q) 的倍数就被排除了两次,因此还要加回来(运用容斥的思想),所以最终 (phi(N)) 可以表示成下面这个式子:
已经符合上面那个式子。
同理通过数学归纳法这可以推广到 (N) 为任意正整数的情况。
(Q.E.D.)
有了这个式子我们可以乱搞一些事情了。
( ext{Lemma 2:}) (phi(n×m)=phi(n)×phi(m), (n,m)=1)
(也即欧拉函数是积性函数)
证明:
因为 ((n,m)=1),即 (n,m) 互质,没有公因子,根据 ( ext{Lemma 1}) 可以得到:
所以:
因此欧拉函数是积性函数。
(Q.E.D.)
当然还有一个显而易见的引理:
( ext{Lemma 3:}) 若 (n=p^k),其中 (p) 为质数,那么 (phi(n)=(p-1)*p^{k-1})
证明:
由 ( ext{Lemma 1}) 可以得到,若 (n=p^k) 且 (p) 为质数,那么 (phi(n)=n*(1-frac{1}{p})=n-frac{n}{p}),将 (n=p^k) 带入即可得到。
(Q.E.D.)
当然还有更重要的东西:
( ext{Lemma 4:}) (displaystylesum_{dmid n}phi(d)=n)
证明:
不妨令 (F(n)=displaystylesum_{dmid n}phi(d))。首先证明 (F) 函数的积性。若 ((n,m)=1),则:
因为 ((n,m)=1),所以得到 (phi(n)*phi(m)=phi(n×m)),那么:
(上述两层和式包含了 (n×m) 的所有因子)
因此 (F) 函数是一个积性函数。所以我们可以只考虑 (n) 的一个质因子,令 (n'=p^c),则:
因此拓展到 (n) 有 (F(n)=n) 即:
成立,命题得证。
(Q.E.D.)
欧拉函数简单提到这里,主要是做一个补充讲解,但是务必记住上面几个引理,接下来会有用到。
Dirichlet 卷积
叫它狄利克雷卷积就好(如果英文不好的话)
定义
狄利克雷卷积定义在两个积性函数上。两个积性函数 (f,g) 的狄利克雷卷积为:
当然 (f*g) 当做个函数名就好, 你可以把 ((f*g)(n)) 理解成一个新的函数 (h(n))。(本来就是新的函数)
亦可以写作:
当然下面这种形式更好看就是了。
一些性质
显然狄利克雷卷积满足结合律和交换律(证明自行尝试吧)
举例
1、 根据上面的定义,以及积性函数中对狄利克雷卷积单位元((epsilon))的介绍,可以得到:
这是狄利克雷卷积单位元的定义,至于其值为何,稍后再讨论。
2、 一个很重要的东西:莫比乌斯函数和欧拉函数的关系:
( ext{ID}) 即 (f(x)=x),后文会给出相关证明。
那么狄利克雷卷积也暂告一段落,但是请务必记住,这个东西非常重要。
莫比乌斯函数
一些性质
1、莫比乌斯函数是积性函数(上面已经说了)
2、回顾一下莫比乌斯函数的通式:
这个通式和上面的描述会有所不同,但结果是一样的。
一些引理和证明
首先对于 (epsilon) 上面给出了莫比乌斯函数和它的关系以及它的通式:
( ext{Lemma 1:}) (epsilon(n)=displaystylesum_{dmid n}mu(n)=egin{cases}1 & n=1 \ 0 & n>1end{cases})
证明:
上文就已经提到,对于 (epsilon) 的定义是这样的:(epsilon(n)=displaystylesum_{dmid n}mu(d))((epsilon =mu * 1))。因为莫比乌斯函数是积性函数,所以若 (n=displaystyleprod^{k}_{i=1}p_i^{c_i}),不妨令 (n'=displaystyleprod^{k}_{i=1}p_i),那么有:
根据二项式定理:((A+B)^k=displaystylesum_{i=0}^{k}inom{n}{i}A^{i} ext{·}B^{k-i}),将 (A=1,B=-1) 带入上式即可得到:
当 (k=0) 时 (n=1),其他情况下 (n>1),因此命题得证。
(Q.E.D.)
当然这个结论可以简单记为 (displaystylesum_{dmid n}mu(d)=[n=1])。
( ext{Lemma 2:}) ([(i,j)=1]iff displaystylesum_{dmid (i,j)}mu(d))
证明:
利用 (epsilon) 可以得到,([(i,j)=1]iff epsilonBig((i,j)Big)),展开 (epsilon):
命题得证。
(Q.E.D.)
其实这是一个反演的小结论,放在这里也无妨。
接下来的引理是重点,展示了欧拉函数和莫比乌斯函数的联系(上文有提到):
( ext{Lemma 3:}) (phi * ext{1}= ext{ID}(ID:f(x)=x))
证明:
根据欧拉函数的 ( ext{Lemma 4}) 即 (displaystylesum_{dmid n}phi(d)=n),有:
所以原命题成立。
(Q.E.D)
我们可以把上面这个式子两边同时卷 (mu),即:
( ext{Lemma 4:}) (phi(n)=displaystylesum_{dmid n}d×mu(frac{n}{d}))
证明在这里便不再赘述了,读者自行把狄利克雷卷积套进去即可得到。
线性筛法
因为莫比函数是积性函数,因此可以线性筛。根据质数线性筛即可得到代码:
void getMu() {
mu[1] = 1, v[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!v[i]) p[++tot] = i, mu[i] = -1;
for (int j = 1; j <= tot && p[j] <= n / i; ++j) {
v[i * p[j]] = 1;
if (i % p[j] == 0) {
mu[i * p[j]] = 0;
break;
}
mu[i * p[j]] = -mu[i];
}
}
}
莫比乌斯反演
终于到了本篇文章的重头戏!(感谢你看完了我写的那么多废话)
公式及证明
设 (f,g) 是两个积性函数,若:
那么:
是不是觉得这个式子和上面莫比乌斯和欧拉函数关系的式子很像啊?其实那个就是莫比乌斯反演了,只不过这里进行了拓展。
证明:
法一:暴力求解
一个比较好的解释就是,用 (displaystylesum_{dmid n}) 替换掉 (displaystyle f(frac{n}{d})),然后变换求和顺序。最后一步可以根据 (displaystylesum_{dmid n}mu(d)=[n=1]),在 (displaystylefrac{n}{k}=1) 时第二个和式值为 (1)。此时有 (n=k),故可等价为 (displaystylesum_{kmid n}[n=k] ext{·}g(k)=g(n))。
法二:运用狄利克雷卷积
考虑转化模型。即已知 (f=g* ext{1}),求证:(g=f*mu)。
显然我们可以得到:(f*u=g* ext{1}*uimplies f*u=g)(( ext{1}*mu=epsilon))
是不是很简单啊
如果对第一种方法不明白,三条路给你选择:(1) 手算一遍 (2) 看看这篇博客:Here (3) 重复第一种
例题 1:[HAOI2011]Problem b
Description
(多组数据)求:
看到这里的 (x,y) 不舒服,所以考虑像前缀和那样分开,每一块分成下面的这种形式:
这个式子还是很麻烦……怎么化开呢(我要化了……)
( ext{Lemma 1:}) (gcd(i,j)=kimplies displaystyle gcdBig(frac{i}{k},frac{j}{k}Big)=1)
证明:(反证法)
令 (d=(i,j),i'=i/d,j'=j/d),那么假设 ((i',j')≠1),也就是 (i',j') 还有公因数,那么必然有 ((i,j)≠d),与条件不符,假设不成立,所以原命题成立。
(Q.E.D.)
因此,我们可以转化问题:
感觉看到了 (Hope) !(然后呢……)
你是不是忘了什么啊:我们上面刚讲过了狄利克雷单位元,它的值是什么?
因为 (gcd(i,j)=1) 时 (epsilon) 为 (1),其余的时候均为 (0),因此上面的式子可以化成:
然后可以变换求和的顺序,尽量把 (mu) 弄到前面去,所以先枚举 (dmid gcd(i,j)):
显然看到后面这个 (dmid i,dmid j) 就会想到整除分块了。(1-iglfloorfrac{n}{k}ig floor) 中 (d) 的倍数有 (iglfloorfrac{n}{k×d}ig floor) 个,所以:
整除分块更加显然了。上述均需保证 (n≤m),运用容斥即可求解原式,时间复杂度 (O(N+Tsqrt{N}))
(代码先咕着)