莫比乌斯函数|莫比乌斯反演

莫比乌斯函数|莫比乌斯反演

(不要问我为什么没有导言了……)

(当然不仅会讲莫比乌斯函数,也会讲一些其他的)

一些准备

  • 一定的数论基础(起码你知道一些基础的数论)

  • 一定的代码实现能力(因为数论题代码不会很长因此能写代码就好)

  • 大量的脑细胞并秃头的准备(大雾

  • 一定的智商和理解能力(数学不好的先去补文化课)

  • 当然还有计算能力(数论题不动手算那怎么行)

  • 更重要的是你基础算法都会了

接下来我主要会按照特定的顺序讲,以便读者观看流畅(顺滑到底

请耐心的一章一章看下去,否则你会看不懂(当然巨佬会了下面的知识就可以跳过往后看)

整除分块(数论分块)

先咕着吧……(要不这么简单你们自行百度就好了)

积性函数与线性筛

首先你要会线性筛质数(不会度娘吧)

什么是积性函数

其实积性函数的定义很简单,积性肯定根积有关,它是定义在正整数域上的,满足:

\[f(x×y)=f(x)×f(y),(x,y)=1 \]

(其中 \((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}\),则:

\[\mu(n)=\begin{cases}0 & \exists i∈[1,m],c_i>1 \\ 1 & m\equiv 0 \pmod{2}, \forall i ∈[1,m],c_i=1 \\ -1 & m\equiv 1 \pmod{2}, \forall i ∈[1,m],c_i=1\end{cases} \]

3、 \(\epsilon(n)\),这个函数的定义是这样的:

\[\epsilon(n)= \begin{cases} 1 & & n=1 \\ 0 & & n>1 \end{cases} \ \ \ \ n∈N^*\]

如果你不认识它,那么说起它的另一个名字你可能更熟悉:狄利克雷卷积的乘法单位。

4、 \(\text{1}(n)\),即常数函数,有 \(\text{1}(n)=1\)

*欧拉函数性质相关

首先规定一个正整数 \(N\) 的唯一分解:\(N=\displaystyle\prod^{m}_{i=1}p_{i}^{c_i}, \ \ p∈primes\)

\(\text{Lemma 1:}\) \(\phi(N)=N×\displaystyle\prod^{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-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}=N(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{pq})=N(1-\frac{1}{p})(1-\frac{1}{q}) \]

  已经符合上面那个式子。
  同理通过数学归纳法这可以推广到 \(N\) 为任意正整数的情况。
\(Q.E.D.\)

有了这个式子我们可以乱搞一些事情了。

\(\text{Lemma 2:}\) \(\phi(n×m)=\phi(n)×\phi(m), \ \ (n,m)=1\)

(也即欧拉函数是积性函数)

证明:
  因为 \((n,m)=1\),即 \(n,m\) 互质,没有公因子,根据 \(\text{Lemma 1}\) 可以得到:

\[\phi(n)=n×\prod^{k_n}_{i=1}(1-\frac{1}{p_i}),\phi(m)=m×\prod^{k_n+k_m}_{i=k_n+1}(1-\frac{1}{p_i}) \]

所以:

\[\phi(n)×\phi(m)=n×\prod^{k_n}_{i=1}(1-\frac{1}{p_i})×m×\prod^{k_n+k_m}_{i=k_n+1}(1-\frac{1}{p_i})=n×m×\prod_{i=1}^{k_n+k_m}(1-\frac{1}{p_i})=\phi(n×m) \]

  因此欧拉函数是积性函数。
\(Q.E.D.\)

当然还有一个显而易见的引理:

\(\text{Lemma 3:}\)\(n=p^k\),其中 \(p\) 为质数,那么 \(\phi(n)=(p-1)*p^{k-1}\)

证明:
  由 \(\text{Lemma 1}\) 可以得到,若 \(n=p^k\)\(p\) 为质数,那么 \(\phi(n)=n*(1-\frac{1}{p})=n-\frac{n}{p}\),将 \(n=p^k\) 带入即可得到。
\(Q.E.D.\)

当然还有更重要的东西:

\(\text{Lemma 4:}\) \(\displaystyle\sum_{d\mid n}\phi(d)=n\)

证明:
  不妨令 \(F(n)=\displaystyle\sum_{d\mid n}\phi(d)\)。首先证明 \(F\) 函数的积性。若 \((n,m)=1\),则:

\[F(n)×F(m)=\sum_{d\mid n}\phi(d)×\sum_{d|m}\phi(d) \]

因为 \((n,m)=1\),所以得到 \(\phi(n)*phi(m)=\phi(n×m)\),那么:

\[F(n)×F(m)=\sum_{i\mid n}\sum_{j\mid m}\phi(i×j)=F(n×m) \]

  (上述两层和式包含了 \(n×m\) 的所有因子)
  因此 \(F\) 函数是一个积性函数。所以我们可以只考虑 \(n\) 的一个质因子,令 \(n'=p^c\),则:

\[F(p^c)=\sum_{i=0}^{c}\phi(p^i)=1+\sum_{i=1}^{c}(p^k×(p-1))=1+\sum_{i=1}^{c}(p^k-p^{k-1})=p \]

  因此拓展到 \(n\)\(F(n)=n\) 即:

\[\sum_{d\mid n}\phi(d)=n \]

成立,命题得证。
\(Q.E.D.\)

欧拉函数简单提到这里,主要是做一个补充讲解,但是务必记住上面几个引理,接下来会有用到。

Dirichlet 卷积

叫它狄利克雷卷积就好(如果英文不好的话)

定义

狄利克雷卷积定义在两个积性函数上。两个积性函数 \(f,g\) 的狄利克雷卷积为:

\[(f*g)(n)=\sum_{d\mid n,d>0}f(d)g(\frac{n}{d}) \]

当然 \(f*g\) 当做个函数名就好, 你可以把 \((f*g)(n)\) 理解成一个新的函数 \(h(n)\)。(本来就是新的函数

亦可以写作:

\[(f*g)(n)=\sum_{i×j=n}f(i)g(j) \ \ \ (i,j>0) \]

当然下面这种形式更好看就是了。

一些性质

显然狄利克雷卷积满足结合律和交换律(证明自行尝试吧)

举例

1、 根据上面的定义,以及积性函数中对狄利克雷卷积单位元(\(\epsilon\))的介绍,可以得到:

\[\epsilon=\mu * 1\iff \epsilon(n)=\sum_{d\mid n}\mu(d) \]

这是狄利克雷卷积单位元的定义,至于其值为何,稍后再讨论。

2、 一个很重要的东西:莫比乌斯函数和欧拉函数的关系:

\[\phi=\mu * \text{ID}\iff \phi(n)=\sum_{d\mid n}d×\mu(\frac{n}{d}) \]

\(\text{ID}\)\(f(x)=x\),后文会给出相关证明。

那么狄利克雷卷积也暂告一段落,但是请务必记住,这个东西非常重要。

莫比乌斯函数

一些性质

1、莫比乌斯函数是积性函数(上面已经说了)

2、回顾一下莫比乌斯函数的通式:

\[\mu(n)=\begin{cases}1 & n = 1 \\ 0 & n\text{ 含有平方因子} \\ (-1)^k & k \text{ 为 } n \text{ 本质不同的质因子个数}\end{cases} \]

这个通式和上面的描述会有所不同,但结果是一样的。

一些引理和证明

首先对于 \(\epsilon\) 上面给出了莫比乌斯函数和它的关系以及它的通式:

\(\text{Lemma 1:}\) \(\epsilon(n)=\displaystyle\sum_{d\mid n}\mu(n)=\begin{cases}1 & n=1 \\ 0 & n>1\end{cases}\)

证明:
  上文就已经提到,对于 \(\epsilon\) 的定义是这样的:\(\epsilon(n)=\displaystyle\sum_{d\mid n}\mu(d)\)\(\epsilon =\mu * 1\))。因为莫比乌斯函数是积性函数,所以若 \(n=\displaystyle\prod^{k}_{i=1}p_i^{c_i}\),不妨令 \(n'=\displaystyle\prod^{k}_{i=1}p_i\),那么有:

\[\sum_{d\mid n}\mu(d)=\sum_{d\mid n'}\mu(d)=\sum^{k}_{i=0}\binom{k}{i}\text{·}(-1)^k \]

  根据二项式定理:\((A+B)^k=\displaystyle\sum_{i=0}^{k}\binom{n}{i}A^{i}\text{·}B^{k-i}\),将 \(A=1,B=-1\) 带入上式即可得到:

\[\sum_{i=0}^{k}\binom{k}{i}(-1)^k=\begin{cases}1&k=0 \\ 0 & k >0\end{cases} \]

  当 \(k=0\)\(n=1\),其他情况下 \(n>1\),因此命题得证。
\(Q.E.D.\)

当然这个结论可以简单记为 \(\displaystyle\sum_{d\mid n}\mu(d)=[n=1]\)

\(\text{Lemma 2:}\) \([(i,j)=1]\iff \displaystyle\sum_{d\mid (i,j)}\mu(d)\)

证明:
  利用 \(\epsilon\) 可以得到,\([(i,j)=1]\iff \epsilon\Big((i,j)\Big)\),展开 \(\epsilon\)

\[\epsilon\Big((i,j)\Big)=\sum_{d\mid (i,j)}\mu(d) \]

  命题得证。
\(Q.E.D.\)

其实这是一个反演的小结论,放在这里也无妨。

接下来的引理是重点,展示了欧拉函数和莫比乌斯函数的联系(上文有提到):

\(\text{Lemma 3:}\) \(\phi * \text{1}=\text{ID}(ID:f(x)=x)\)

证明:
  根据欧拉函数的 \(\text{Lemma 4}\)\(\displaystyle\sum_{d\mid n}\phi(d)=n\),有:

\[\phi * \text{1}=\sum_{d\mid n}\phi(n)=n=\text{ID} \]

  所以原命题成立。
\(Q.E.D\)

我们可以把上面这个式子两边同时卷 \(\mu\),即:

\(\text{Lemma 4:}\) \(\phi(n)=\displaystyle\sum_{d\mid 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\) 是两个积性函数,若:

\[f(n)=\sum_{d\mid n}g(d) \]

那么:

\[g(n)=\sum_{d\mid n}\mu(d)×f(\frac{n}{d}) \]

是不是觉得这个式子和上面莫比乌斯和欧拉函数关系的式子很像啊?其实那个就是莫比乌斯反演了,只不过这里进行了拓展。

证明:
法一:暴力求解

\[\sum_{d\mid n}\mu(d)f(\frac{n}{d})=\sum_{d\mid n}\Big(\mu(d)\sum_{k\mid \frac{n}{d}}g(k)\Big)=\sum_{k\mid n}\Big(g(k)\sum_{d\mid \frac{n}{k}}\mu(d)\Big)=g(n) \]

  一个比较好的解释就是,用 \(\displaystyle\sum_{d\mid n}\) 替换掉 \(\displaystyle f(\frac{n}{d})\),然后变换求和顺序。最后一步可以根据 \(\displaystyle\sum_{d\mid n}\mu(d)=[n=1]\),在 \(\displaystyle\frac{n}{k}=1\) 时第二个和式值为 \(1\)。此时有 \(n=k\),故可等价为 \(\displaystyle\sum_{k\mid n}[n=k]\text{·}g(k)=g(n)\)
法二:运用狄利克雷卷积
  考虑转化模型。即已知 \(f=g*\text{1}\),求证:\(g=f*\mu\)
  显然我们可以得到:\(f*u=g*\text{1}*u\implies f*u=g\)\(\text{1}*\mu=\epsilon\)

是不是很简单啊

如果对第一种方法不明白,三条路给你选择:(1) 手算一遍 (2) 看看这篇博客:Here (3) 重复第一种

例题 1:[HAOI2011]Problem b

Description

(多组数据)求:

\[\sum_{i=x}^{n}\sum_{j=y}^{m}[gcd(i,j)=k] \ \ \ \ \ (1≤T,x,y,n,m,k≤10^5) \]

看到这里的 \(x,y\) 不舒服,所以考虑像前缀和那样分开,每一块分成下面的这种形式:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=1] \]

这个式子还是很麻烦……怎么化开呢(我要化了……)

\(\text{Lemma 1:}\) \(gcd(i,j)=k\implies \displaystyle gcd\Big(\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.\)

因此,我们可以转化问题:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=k]\implies \sum_{i=1}^{\big\lfloor\frac{n}{k}\big\rfloor}\sum_{j=1}^{\big\lfloor\frac{m}{k}\big\rfloor}[gcd(i,j)=1] \]

感觉看到了 \(Hope\) !(然后呢……)

你是不是忘了什么啊:我们上面刚讲过了狄利克雷单位元,它的值是什么?

\[\epsilon(n)=\begin{cases}1 & n=1 \\ 0 & n>1\end{cases} \]

因为 \(gcd(i,j)=1\)\(\epsilon\)\(1\),其余的时候均为 \(0\),因此上面的式子可以化成:

\[\sum_{i=1}^{\big\lfloor\frac{n}{k}\big\rfloor}\sum_{j=1}^{\big\lfloor\frac{m}{k}\big\rfloor}\epsilon\Big(gcd(i,j)\Big)\implies \sum_{i=1}^{\big\lfloor\frac{n}{k}\big\rfloor}\sum_{j=1}^{\big\lfloor\frac{m}{k}\big\rfloor}\sum_{d\mid gcd(i,j)}\mu(d) \]

然后可以变换求和的顺序,尽量把 \(\mu\) 弄到前面去,所以先枚举 \(d\mid gcd(i,j)\)

\[\sum_{d=1}^{\big\lfloor\frac{n}{k}\big\rfloor}\mu(d)\sum_{i=1}^{\big\lfloor\frac{n}{k}\big\rfloor}d\mid i\sum_{j=1}^{\big\lfloor\frac{m}{k}\big\rfloor}d\mid j \]

显然看到后面这个 \(d\mid i,d\mid j\) 就会想到整除分块了。\(1-\big\lfloor\frac{n}{k}\big\rfloor\)\(d\) 的倍数有 \(\big\lfloor\frac{n}{k×d}\big\rfloor\) 个,所以:

\[\sum_{d=1}^{\big\lfloor\frac{n}{k}\big\rfloor}\mu(d)\big\lfloor\frac{n}{kd}\big\rfloor\big\lfloor\frac{m}{kd}\big\rfloor \]

整除分块更加显然了。上述均需保证 \(n≤m\),运用容斥即可求解原式,时间复杂度 \(O(N+T\sqrt{N})\)

(代码先咕着)

posted @ 2019-12-13 17:09  Ning-H  阅读(338)  评论(0)    收藏  举报