莫比乌斯反演 学习笔记 & 做题记录

一、莫比乌斯反演原理

定义 积性函数 \(f\) 满足:
\(\cdot\) \(f(1) = 1\)
\(\cdot\) 对于任意 \(x, y \in N^*\)\(\gcd(x, y) = 1\)\(f(xy) = f(x) * f(y)\)
定义 完全积性函数 \(f\) 满足:
\(\cdot\) \(f(1) = 1\)
\(\cdot\) 对于任意 \(x, y \in N^*\)\(f(xy) = f(x) * f(y)\)
积性函数可以统一用类似线性筛的做法 \(O(n)\) 预处理。
所以我们就有一些基本的积性函数:
\(\mu(x)\) 莫比乌斯函数
\(\varphi(x)\) 欧拉函数
\(d(x)\) 分数函数
\(E(x)\) 单位函数 (完全积性)
\(I(x)\) 常数函数 (完全积性)
\(id(x)\) 恒等函数 (完全积性)
接下来定义函数的 狄利克雷卷积
对于两个定义域为 \(N^*\) 的函数 \(f, g\)\(h = f * g \rightleftharpoons h(n) = \sum _\limits{d | n} f(d) * g(\frac{n}{d})\)
那么莫比乌斯反演的三个式子就是:
\(\mu(x) * I(x) = E(x)\)
\(\varphi(x) * I(x) = id(x)\)
\(I(x) * I(x) = d(x)\)
其中最重要的一项就是第一个式子。
\(E(x) = [x = 1]\),是一个判断式,而 \(\mu(x) * I(x) = \sum _\limits{d | x} \mu(x)\),是一个循环。
这个式子将判断式和循环式互相转换,非常有用。

二、做题记录

ZAP-Queries

题意:给定 \(n, m, d\),求 \(\sum _\limits{i = 1}^{a} \sum _\limits{j = 1} ^{b}[\gcd(i, j) = d]\)
数据范围:\(1 \leq T \leq 5 \times 10 ^ 4\)\(1 \leq d \leq n, m \leq 5 \times 10^4\)\(T\) 为数据组数)

首先先把 \(d\) 扔进循环里方便处理。 \(\sum _\limits{i = 1}^{\lfloor \frac {a} {d} \rfloor} \sum _\limits{j = 1} ^{\lfloor \frac {b} {d} \rfloor}[\gcd(i, j) = 1]\)
因为这里有个判断式,我们不能拆贡献,所以直接使用 \(\mu(x) * I(x) = E(x)\) 代入。
\(\sum _\limits{i = 1}^{\lfloor \frac {a} {d} \rfloor} \sum _\limits{j = 1} ^{\lfloor \frac {b} {d} \rfloor}E(\gcd(i, j)) = \sum _\limits{i = 1}^{\lfloor \frac {a} {d} \rfloor} \sum _\limits{j = 1} ^{\lfloor \frac {b} {d} \rfloor} \sum _\limits{k | \gcd(i, j)} \mu(k) = \sum _\limits{i = 1}^{\lfloor \frac {a} {d} \rfloor} \sum _\limits{j = 1} ^{\lfloor \frac {b} {d} \rfloor} \sum _\limits{k | i, k | j} \mu(k)\)
然后拆贡献,把 \(k\) 扔前面去。
\(\sum _\limits{k = 1} ^{\min(\lfloor \frac{a}{d} \rfloor, \lfloor \frac{b}{d} \rfloor)} \mu(k) \times \lfloor \frac{a}{kd} \rfloor \times \lfloor \frac{b}{kd} \rfloor\)
然后整除分块就好了,直接快速找出所有 \((\lfloor \frac{a}{kd} \rfloor, \lfloor \frac{b}{kd} \rfloor)\) 不相同的块,求一下 \(\mu\) 的前缀和就做完了。
时间复杂度 \(O(T \times \sqrt{\lfloor \frac{\max(a, b)} {d} \rfloor})\),可以通过此题。

YY的GCD

题意:给定 \(n, m\),求 \(1 \leq i \leq n, 1 \leq j \leq m\)\(\gcd(i, j) \in prime\)\((x, y)\) 对数。
\(10^4\) 组数据,\(1 \leq n, m \leq 10^7\)
为了方便描述,不妨设 \(n \leq m\)
将题目转化为数学式子 \(\sum _\limits {i = 1} ^{n} \sum _\limits {j = 1} ^{m} [\gcd(i, j) \in prime]\)
直接枚举这个质数 \(\sum _\limits {p \in prime} ^{n} \sum _\limits {i = 1} ^{n} \sum _\limits {j = 1} ^{m} [\gcd(i, j) = p]\)
\(p\) 扔掉 \(\sum _\limits {p \in prime} ^{n} \sum _\limits {i = 1} ^{\lfloor \frac{n} {p} \rfloor} \sum _\limits {j = 1} ^{\lfloor \frac{m} {p} \rfloor} [\gcd(i, j) = 1]\)
直接上莫反 \(\sum _\limits {p \in prime} ^{n} \sum _\limits {k = 1} ^{\lfloor \frac {n} {p} \rfloor} \mu(k) \times \lfloor \frac{n}{kp} \rfloor \times \lfloor \frac{m}{kp} \rfloor\)
现在这个式子的复杂度是 \(O(T \times \log n \times \sqrt n)\),无法通过此题,而且这个式子无论如何也无法化简。
思考为什么不能化简,发现原来是因为无论如何都得枚举 \(p,k\) 后才能整除分块,这个复杂度是无法避免的。
所以考虑枚举 \(kp = d\) 来优先处理整除分块。 \(\sum _\limits {d = 1} ^{n} \times \lfloor \frac{n}{d} \rfloor \times \lfloor \frac{m}{d} \rfloor \times \sum _\limits {x | d \& x \in prime} \mu(\frac{d}{x})\)
然后神奇的事情来了,后面这个东西可以预处理,所以直接整除分块 \(O(T \sqrt n)\) 解决,可以通过此题。

posted @ 2025-08-19 16:21  BeBanned  阅读(18)  评论(1)    收藏  举报