莫比乌斯反演

废话

这篇博客还有很多未完善的地方,所以如果想学莫比乌斯反演的话最好不要看这篇文章(

被莫比乌斯反演创死了。

前置芝士多得一批,有空我来写一遍。

「莫比乌斯反演」和「莫比乌斯变换」不是一个东西哦。(好像是一个东西?)

草,我把 $\mu$ 当成 $\varphi$ 了,大家别学我,有一些地方写错了,现已更正。

前置芝士

多,太多了。

你得会欧拉筛以及利用欧拉筛来筛积性函数(最经典的就是欧拉函数 $\varphi$),这一点不会在博客里讲。

莫比乌斯函数

首先你要知道莫比乌斯函数是什么,它长成这样:

$$ \mu(n) = \begin{cases} 1 & n = 1\\ 0 & n\text{ 含有平方因子}\\ (-1)^{k} & \textbf{Otherwise} \end{cases} $$

上面的 $k$ 表示 $n$ 的本质不同质因子个数。

然后可以证明这玩意是个积性函数吗,也就是说 $\gcd(p, q) = 1$ 时 $\mu(pq) = \mu(p)\mu(q)$。

这个函数看起来非常的弱智,只要你会质数筛你就可以在 $\mathcal{O}(\log n)$ 的时间复杂度内求出 $\mu(n)$。

但是实际上很多时候会卡你的 $\log$。。。

不过既然莫比乌斯函数是积性函数,那么它就是可以筛的!

(目前我知道的积性函数都是可以筛的,只是复杂程度不同而已。)

回忆一下欧拉筛是如何筛欧拉函数的,准确地来说,要知道欧拉筛保证了每个合数仅会被它的最小质因数筛到,以此来做到 $\mathcal{O}(n)$ 复杂度。

那么筛到质数的时候 $\mu(p) = 1$,如果是合数,我们一定是通过 $i \times prime_{j}$ 这样的形式筛到它的,这时候检查 $prime_{j}$ 是否是 $i$ 的因数,如果是那么 $\mu(i \times prime_{j}) = 0$,否则 $\mu(i \times prime_{j}) = -\mu(i)$。

代码就不放了,这个东西甚至比欧拉函数的筛法还好记。

(一点点的)Dirichlet 卷积基础

这个东西有空开个坑细说,先放一个 OI wiki 的链接。

数论分块

不是毒瘤 lxl 的分块。挺简单的。

假设我们有一个函数 $f(n)$,我们知道这个函数在 $[1, n]\cap \mathbb{N}$ 上的函数值,现在我们想快速计算下面这个式子的值:

$$ \sum\limits_{i = 1}^{n}\left\lfloor\dfrac{n}{i}\right\rfloor f(i) $$

如果没有系数的限制那么一个前缀和就能搞定,但是现在它有一个 $\left\lfloor\dfrac{n}{i}\right\rfloor$ 这样很烦人的系数。

不妨取 $n = 20$,把这些系数都写下来,你会发现有很多系数都是连续且相同的(比如 $11 \leqslant i \leqslant 20$ 时 $\left\lfloor\dfrac{n}{i}\right\rfloor = 1$),数论分块就是将这些值相同的数“打包”计算。

但是我们需要“打包”多少个数?答案是不超过 $2\sqrt{n}$ 个数,具体证明:

对于 $1 \leqslant i \leqslant \sqrt{n}$ 的情况,$\left\lfloor\dfrac{n}{i}\right\rfloor$ 最多有 $\sqrt{n}$ 种取值(分母只有 $\sqrt{n}$ 种取值)。

对于 $\sqrt{n} \leqslant i \leqslant n$ 的情况,$1 \leqslant \left\lfloor\dfrac{n}{i}\right\rfloor \leqslant \sqrt{n}$,也最多只有 $\sqrt{n}$ 种取值。

总共加起来最多就有 $2\sqrt{n}$ 种取值。

什么,你说 $f(i)$ 不同怎么处理?前缀和就行了。

还有一点就是我们目前想要“打包”$\left\lfloor\dfrac{n}{i}\right\rfloor = j$ 的数,如何知道这个区间的左右端点?二分显然是不优的。

每次左端点一定是会设成右端点的下一个的,所以左端点是已知的,只用考虑右端点。

(发现向下取整符号里面套分数会非常丑,于是用 $p / q$ 来代替 $\left\lfloor\dfrac{p}{q}\right\rfloor$,请注意整除和分数的区别。)

假设左端点为 $l$,右端点为 $r$,那么有:

$$ n / (n / l) \geqslant n / (\dfrac{n}{l}) = l $$

因为 $n / l = n / r$,所以 $r$ 是所有满足 $n / l = n / i$ 中最大的 $i$,此时应为 $n / (n / l)$。

因为 $n / l = n / (n / (\dfrac{n}{l}))$,所以是求最大的 $i = n / (\dfrac{n}{l})$ 而上面证明了 $n / (n / l) \geqslant n / (\dfrac{n}{l}) $,所以 $r = i_{max} = n / (n / l)$。

代码就不放了,理解过后就很好打了。

莫比乌斯反演

说了这么多终于进入正题了。

莫比乌斯函数有一些有用的性质,比如:

$$ \sum\limits_{d | n}\mu(d) = \begin{cases} 1 & n = 1\\ 0 & \textbf{Otherwise} \end{cases} $$

也就是说如果出现了 $[n = 1]$ 这样的柿子,就可以通过这种方法转化成莫比乌斯函数求和的形式了。

证明:

$n = 1$ 时正确性显然,接下来考虑 $n \geqslant 2$ 时的情况。

把 $n$ 质因数分解为 $\prod\limits_{i = 1}^{cnt}p_{i}^{k_{i}}$ 的形式,考虑每一个因数 $d$ 的 $p_{i}$ 的次数 $k_{i}'$,如果大于等于 $2$ 的话 $mu(d) = 0$,所以只用考虑 $k_{i}' \leqslant 1$ 的情况。

(这个时候又要用到二项式定理了,不得不说这个东西是真的常用。。。)

枚举 $k' = 1$ 的数的个数(设为 $i$),此时 $\mu(d) = (-1)^{i}$,那么有 $i$ 个 $k' = 1$ 的方案数是 $\binom{cnt}{i}$,所以写出来就是 $\sum\limits_{i = 0}^{cnt}\binom{cnt}{i}(-1)^{i}$,已经是个很套路的二项式定理了,它等于 $(1 - 1)^{cnt} = [cnt = 0]$,而此时 $n \geqslant 2$ 所以它为 $0$。

把这个东西写成 Dirichlet 卷积的形式就是:$\mu * 1 = \varepsilon$,$\varepsilon$ 是 Dirichlet 卷积中的单位元。

之前写错的柿子应该是 $\varphi * 1 = \operatorname{id}$,其中 $\operatorname{id}(n) = n$。

($\operatorname{id}$ 看起来很没意义,但是它的作用在于把它们统一成函数的形式。。。)

例题

等我多做一点了来再写上来。

posted @ 2023-12-26 16:18  A_box_of_yogurt  阅读(1)  评论(0编辑  收藏  举报  来源
Document