莫比乌斯反演
初一的时候学不会,现在补一下。
前置知识:
-
数论分块
-
狄利克雷卷积
-
线性筛一些积性函数
-
杜教筛
狄利克雷卷积
狄利克雷卷积 是定义在数论函数间的一种二元运算,可以定义为 \((f * g)(n) = \sum\limits_{xy = n} f(x) \cdot g(y)\) 或 \((f * g)(n) = \sum\limits_{d \mid n} f(d) \cdot g(\frac{n}{d})\)
性质
-
若 \(f, g\) 均为积性函数,则 \(f * g\) 也是积性函数。
-
若 \(g, f * g\) 均为积性函数,则 \(f\) 也是积性函数。
-
积性函数在狄利克雷卷积意义下的逆也是积性函数。
卷积关系
-
\(\operatorname{Id_k} * \textbf{1} = \sigma_k\)
-
\(\varphi\) 反演:\(\varphi * \textbf{1} = \operatorname{Id}\)
-
\(\mu * \textbf{1} = \epsilon\)
-
\(\mu * \operatorname{Id} = \varphi\)
-
\((\textbf{1} * \textbf{1})(n) = \textbf{d}(n)\)
-
\(\sigma_0 * \mu = \textbf 1\)
杜教筛
杜教筛是一种可以在非线性时间内筛出积性函数在较大值域内前缀和的筛法。
对于数论函数 \(f\),考虑筛出它的前缀和 \(S\).
考虑构造两个辅助用的数论函数 \(g\) 和 \(h = f * g\).
根据卷积结论有 \(\sum\limits_{i = 1}^n h(i) = \sum\limits_{i = 1}^n g(i) S(\frac{n}{i})\)
考虑把右边 \(i = 1\) 时的取值提出来,移项得到结论:
\(g(1) \cdot S(n) = \sum\limits_{i = 1}^n h(i) - \sum\limits_{i = 2} g(i) S(\frac{n}{i})\)
于是问题转化成快速求 \(h\) 的值。
在此前提下,暴力计算的复杂度是 \(O(n^{\frac{3}{4}})\),先筛出前面若干项,之后再记忆化可以得到 \(O(n^{\frac{2}{3}})\) 的做法。
筛莫比乌斯函数
因为卷积有 \(\mu * I = \epsilon\),所以可以取 \(f = \mu, g = I, h = \epsilon\)
ll get_mu(int n)
{
if (n <= 5e6) return smu[n];
if (gmu.count(n)) return gmu[n];
ll ans = 1;
for (uint l = 2, r; l <= n; l = r + 1)
{
r = n / (n / l);
ans -= (r - l + 1) * get_mu(n / l);
}
return gmu[n] = ans;
}
筛欧拉函数
\(f = \varphi, g = I, h = \operatorname{Id}\)
ll get_phi(int n)
{
if (n <= 5e6) return sphi[n];
if (gphi.count(n)) return gphi[n];
ll ans = 1ll * n * (n + 1ll) / 2ll;
for (uint l = 2, r; l <= n; l = r + 1
{
r = n / (n / l);
ans -= (r - l + 1) * get_phi(n / l);
}
return gphi[n] = ans;
}
概念
莫比乌斯反演是一种利用数论函数之间的卷积关系,对函数进行简化的手段。
艾佛森括号:记作 \([P]\),当命题 \(P\) 为真时值为 \(1\),反之为 \(0\).
数论分块(整除分块):
- 引理:\(\forall a, b, c \in Z, \lfloor \frac{\lfloor \frac{a}{b} \rfloor}{c} \rfloor = \lfloor \frac{a}{bc} \rfloor\)
对于形如 \(\frac{n}{i}\) 的式子,其取值至多有 \(O(\sqrt{n})\) 种,且同一种取值形成连续段。
对于 \(x\) 所在的连续段,其右端点为 \(\lfloor \frac{n}{\lfloor \frac{n}{x} \rfloor} \rfloor\)
-
求 \(\sum\limits_{i = 1}^n \lfloor \frac{n}{i} \rfloor\)
考虑直接跳左右端点。
-
求 \(\sum\limits_{i = 1}^n n \bmod i\)
原式等价于 \(\sum\limits_{i = 1}^n n - i \lfloor \frac{n}{i} \rfloor\)
-
求 \(\sum\limits_{i = 1}^n f(i) \cdot (n \bmod i)\)
考虑对 \(f\) 求出前缀和,再套上外层的数论分块。
性质
-
对于积性函数 \(f\),\(f(n) = \prod\limits_{i = 1}^m f(p_i^{k_i})\),其中 \(p\) 为 \(n\) 的质因子。
-
积性函数在狄利克雷卷积意义下的逆也是积性函数。
另:函数逆的构造方法
公式
设 \(F(n) = \sum\limits_{d \mid n} f(d)\)
根据卷积定义有 \(F = I * f\)
两边同乘 \(I^{-1}\) 得 \(f = F * I^{-1}\)
其中 \(I^{-1}\) 是莫比乌斯函数 \(\mu\)
于是得到:
-
\([n = 1] = \sum\limits_{d \mid n} \mu(d)\)
所以 \([n \mid m] \sum\limits_{d \mid \frac{n}{m}} \mu(d) = [n = m]\)
-
若 \(F(n) = \sum\limits_{d \mid n} f(d)\),则 \(f(n) = \sum\limits_{d \mid n} F(d) \mu(\frac{n}{d})\),等价于 \(f(n) = \sum\limits_{d \mid n} F(\frac{n}{d}) \mu(d)\)
-
若 \(F(n) = \sum\limits_{n \mid d} f(d)\),则 \(f(n) = \sum\limits_{n \mid d} F(d) \mu(\frac{d}{n})\)
技巧
考虑每个质因子的贡献。
一些高妙的反演:
- \(\varphi\) 反演:\(x = \sum\limits_{d \mid x} \varphi(d)\)
一些有用的结论:
-
\(\sum\limits_{1}^n = \frac{n(n + 1)}{2}\)
-
\(\sum\limits_{i = 1}^n i^2 = \frac{n(n + 1)(2n + 1)}{6}\)
-
\((\sum\limits_{i = 1}^n)^2 = \frac{n^2 (n + 1)^2}{4}\)
-
在直角坐标系上,从 \((a, b)\) 到 \((c, d)\) 的直线经过的坐标均为整数的点共有 \(\gcd(a - c, b - d) + 1\) 个(含端点,\(a > c, b > d\))。
这个结论扩展到三维同样成立。
一些化简的技巧:
-
\(\mu\) 函数的性质
\([\gcd(i, j)] = 1\) -> \(\sum\limits_{d \mid \gcd(i, j)} \mu(d)\)
-
改变枚举顺序
\(\sum\limits_{i = 1}^n \sum\limits_{j = 1}^m \sum\limits_{d \mid \gcd(i, j)} \mu(d)\) -> \(\sum\limits_{d = 1}^{\min(n, m)} \sum\limits_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \sum\limits_{j = 1}^{\lfloor \frac{m}{d} \rfloor} \mu(d)\) -> \(\sum\limits_{d = 1}^n \mu(d) \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor\)
-
提出 \(\gcd\)
\(\sum\limits_{i = 1}^n \sum\limits_{j = 1}^m [\gcd(i, j) = k]\) -> \(\sum\limits_{i = 1}^{\lfloor \frac{n}{i} \rfloor} \sum\limits_{i = 1}^{\lfloor \frac{m}{i} \rfloor} [\gcd(i, j) = 1]\)
-
合并枚举变量
\(\sum\limits_{d = 1}^n \sum\limits_{i = 1}^{\lfloor \frac{n}{d} \rfloor} f(\frac{n}{id})\) -> \(\sum\limits_{T = 1}^n \sum\limits_{d \mid T} f(\frac{n}{T})\)
-
求满足限制的序列个数 -> 考虑长度为 \(2\) 的情况。
-
以 \(\mu\) 为容斥系数
求与完全平方数有关的计数问题,例如考虑第 \(k\) 个不为完全平方数倍数的正整数。
-
求积式时考虑将指数化为和式形式,不要直接写成和式。
-
对于多组询问的题目,考虑把询问离线下来用数据结构维护。
通常有树状数组的 \(O(n \ln n \log n)\) 做法,即对于每个数考虑修改它的倍数。