来我们写一下这个部分……(虚晃一枪)啊好,没写呢
数论函数是一类定义域在正整数上的函数。若对数论函数 $f$,且 $\forall a, b$ 使得 $(a, b) = 1$,都满足
$$ f(ab) = f(a) \cdot f(b) $$
则称 $f$ 是积性函数。如果条件弱一些,不需要 $(a, b) = 1$ 也有上式成立,则称 $f$ 是完全积性函数。只要 $f$ 是一个积性函数,同时能够快速地求出 $f$ 在质数 $p$ 幂次上的取值 $f(p^a)$,那么就可以用线筛求 $f$。
若 $f, g$ 都是积性函数,则以下函数也是积性函数:
$$ h(x) = f(x^p) \\ h(x) = f^p(x) \\ h(x) = f(x)g(x) \\ h = f * g \\ $$
定义符号
$$ [expr] = \begin{cases} 1, &\text{expr is true} \\ 0, &\text{expr is false} \\ \end{cases} $$
来我们写一下这个部分……(虚晃一枪)啊好,没写呢
对数论函数 $f, g$,定义它们的狄利克雷卷积
$$ (f \times g)(n) = \sum _{d \mid n} f(n) \cdot g \left(\frac nd \right) $$
狄利克雷卷积满足:
同时,两个积性函数的狄利克雷卷积还是积性函数。
一个常用的卷积式子:$n = \varphi \times 1$,简单证明如下:
首先枚举约数,每个约数求出小于他且与他互质的个数,即求这个约数为分母的真分数个数,它们的和必为 $n$。例如 $n = 12$ 时的真分数有
$$\frac 1{12}\frac 2{12}\frac 3{12}\frac 4{12}\frac 5{12}\frac 6{12}\frac 7{12}\frac 8{12}\frac 9{12}\frac {10}{12}\frac {11}{12}\frac {12}{12}$$
可以化简为
莫比乌斯反演是偏序集上的一个反演,不过在此处我们只讨论整数格上的莫比乌斯反演。
定义莫比乌斯函数 $\mu(n)$:
$$ \mu(n)= \begin{cases} 1, &n = 1 \\ (-1)^m, &n = \prod_{i=1}^m p_i^{k_i},\ \prod_{i=1}^m k_i=1 \\ 0, &\text{otherwise}\\ \end{cases} $$
$\mu(n)$ 有两个性质:
第一条性质说明 $\mu(n)$ 可以线性筛;第二条性质提供了我们一个当且仅当 $n = 1$ 时计数的函数,因此在遇到对 $\gcd(i, j) = 1$ 的计数问题中通常会用到它。
直接给出代码。
void InitMu() { mu[1] = 1; for (int i = 2; i < N; i++) { if (!notPri[i]) pri[siz++] = i, mu[i] = -1; for (int j = 0; j < siz && i * pri[j] < N; j++) { int nxt = i * pri[j]; notPri[nxt] = 1; if (i % pri[j]) mu[nxt] = -mu[i]; else { mu[nxt] = 0; break; } } } }
当出现平方因子就退出筛法保证了每个数只会被最小的因子筛去,因此时间复杂度线性。$\mu(i) = 0$ 的情况是由最小因子筛掉的,而其他情况都是由 $\mu(i) = -\mu(j)$ 得到的。
若函数 $f(n)$ 与 $g(n)$ 为数论函数,且满足 $g = f \times 1$,则 $f = g \times \mu$。一种理解的方法如下:
狄利克雷卷积中,$1$ 的逆是 $\mu$,即 $\varepsilon = 1 \times \mu$。这很容易理解:对 $(\mu \times 1)(n)$ 作出贡献的仅有 $n$ 的质因数的乘积和 $1$。
对于 $n$ 的质因数,如果 $n$ 有 $m\geq 1$ 个质因数,那它就有 $m$ 个“一个质因数的积”,$C_{m}^{2}$ 个“两个质因数的积……他们卷起来的和是
$$ (-1)\cdot \binom m1 + (-1)^2 \cdot \binom m2 + \cdots + (-1)^m \binom mm = [1 + (-1)]^m - 1 $$
加上 $1$ 的贡献,即为 $0$。所以只有当 $n=1$ 的时候 $(\mu \times 1)(n)$ 才为 $1$,故 $\varepsilon = 1 \times \mu$。
给出一些常用反演:
给定 $n, m, k$,求 $\sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j) = k]$。
不难发现:
$$ \begin{aligned} \sum_{i=1}^n \sum_{j=1}^m [(i,j)=k] =& \sum_{i=1}^n \sum_{j=1}^m \left[\left(\frac ik,\frac jk\right)=1\right] \\ =& \sum_{i=1}^n \sum_{j=1}^m \sum_{g|(i,j)} \mu(g) \\ =& \sum_{i=1}^n \sum_{j=1}^m \sum_{g|i\text{ 且 }g|j} \mu(g) \\ =& \sum_{g=1}^n\sum_{i=1}^{\left\lfloor n/g\right\rfloor} \sum_{j=1}^{\left\lfloor m/g\right\rfloor} \mu(g) \\ =& \sum_{g=1}^n \mu(g) \sum_{i=1}^{\left\lfloor n/g \right\rfloor} \sum_{j=1}^{\left\lfloor m/g\right\rfloor} \\ \end{aligned} $$
而 $\left\lfloor \dfrac ng\right\rfloor$ 只有不超过 $\sqrt{n}$ 种取值,$\left\lfloor \dfrac ng\right\rfloor$ 和 $\left\lfloor \dfrac mg\right\rfloor$ 只有不超过 $\sqrt{n}+\sqrt{m}$ 种取值,因此可以将 $[1,n]$ 分成 $\sqrt{n}+\sqrt{m}$ 块,每一块的 $\left\lfloor \dfrac ng\right\rfloor$ 和 $\left\lfloor \dfrac mg\right\rfloor$ 取值都不变,则我们预处理 $\mu$ 后可以对一块区间进行 $\mathcal{O}(1)$ 的统计,总时间复杂度为 $\mathcal{O}(\sqrt{n}+\sqrt{m})$。
令$f(k)=\sum_{i=1}^n \sum_{j=1}^m [(i,j)=k]$,$g(k)=\sum_{i=1}^n \sum_{j=1}^m [k \mid (i,j)]$,则$f(k)$就是我们要求的答案。很明显 $k \mid (i,j) \Leftrightarrow k \mid i\text{ 且 } k\mid j$,因此$g(k)=\left\lfloor \dfrac nk \right\rfloor \left\lfloor \dfrac mk \right\rfloor$。
发现 $g(k)=\sum_{d=1}^{\left\lfloor n/k \right\rfloor}f(d \times k)$,因此有:
$$ \begin{aligned} f(k)=&\sum_{d=1}^{\left\lfloor n/k \right\rfloor}g(d \times k)\mu(d) \\ =&\sum_{d=1}^{\left\lfloor n/k \right\rfloor}\left\lfloor \dfrac n{dk} \right\rfloor \left\lfloor \dfrac m{dk} \right\rfloor\mu(d) \end{aligned} $$
令 $n'=\left\lfloor \dfrac nk \right\rfloor,m'=\left\lfloor \dfrac mk \right\rfloor$,则
$$ \begin{aligned} f(k)=&\sum_{d=1}^{\left\lfloor n/k \right\rfloor}\left\lfloor \dfrac {n'}d \right\rfloor \left\lfloor \dfrac {m'}d \right\rfloor\mu(d) \end{aligned} $$
类似上面可以证明 $n',m'$ 的取值个数,因此求解也是 $\mathcal{O}(\sqrt{n}+\sqrt{m})$ 的。
好了,那求了一个区间后,怎么寻找下一个区间?假设我们当前区间开头为 $i$,并假设下一个区间为 $j$ ,则:
$$ \begin{aligned} \left\lfloor \dfrac {n'}i \right\rfloor & \leq \left\lfloor \dfrac {n'}j \right\rfloor \\ \Rightarrow \left\lfloor \dfrac {n'}i \right\rfloor & \leq \dfrac {n'}j \\ \Rightarrow j & \leq \dfrac {n'}{\left\lfloor {n'}/i \right\rfloor} \\ \Rightarrow j & \leq \left\lfloor \dfrac {n'}{\left\lfloor {n'}/i \right\rfloor}\right\rfloor\\ \end{aligned} $$
同理可得 $m$。因此 $j=\min\left( \left\lfloor \dfrac {n'}{\left\lfloor {n'}/i \right\rfloor} \right\rfloor,\left\lfloor \dfrac {m'}{\left\lfloor {m'}/i \right\rfloor} \right\rfloor\right)$。这个技巧在很多莫比乌斯反演的题目都用得上。
直接给出结论:
$$ d(ij) = \sum _{x|i} \sum _{y|j} [(x, y) = 1] $$
以下给出一个简单的证明:
上式显然先决定 $x$ 的取值,再决定 $y$ 的取值。对于一个因子 $p$,若 $p^a | i,\ p^b | j$,且 $p^{a+b} | ij$,则
综上,因子 $p^0, p^1, \ldots, p^{a+b}$ 都能被唯一地表示出来且一一对应(双射),因此等式成立。
然后还有个推广的神奇大结论:
$$\sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} d(x_1 x_2 \cdots x_k) = \sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} \prod_{i=1}^{k} \left\lfloor \dfrac{y_i}{x_i} \right\rfloor \prod_{i < j } [(x_i, x_j)=1]$$
太神奇,证明需要二重数学归纳,略过。
莫比乌斯的题目通常能转化为 $(i,j)=1$ 的计数问题,而转化为计数问题我们就容易通过分块求解了。
二维 GCD 计数前缀和。
POI2007 Zap 的加强版,容斥原理加加减减就好了。
仍然是二维 GCD 计数前缀和,不过需要 $(i,j)$ 为质数。只要预处理质数的 $\mu$ 前缀和就好了。
不被挡住即行列 $(i,j)=1$(从 $0$ 标号),因此答案为 $(\sum_{i=1}^n \sum_{i=1}^n [(i,j)==1])+2$($2$个是$(0,1),(1,0)$)。最终化为 $(\sum_{g=1}^n \mu(g) \lfloor n / g\rfloor ^2)+2$,分块求解。
是道好题,然而需要结论。
令 $n'=\dfrac ng$,$m'=\dfrac mg$,则
$$ \begin{aligned} \sum_{i=1}^n \sum_{j=1}^m d(ij) =&\sum_{i=1}^n \sum_{j=1}^m [(i,j)==1] \\ =&\sum_{i=1}^n \sum_{j=1}^m {\left\lfloor \dfrac ni\right\rfloor}{\left\lfloor \dfrac mj\right\rfloor} \sum_{g|(i,j)}\mu(g) \\ =&\sum_{g=1}^n\mu(g)\sum_{i=1}^{\left\lfloor n/g\right\rfloor} \sum_{j=1}^{\left\lfloor m/g\right\rfloor} \dfrac n{ig} \dfrac m{jg} \\ =&\sum_{g=1}^n\mu(g)\sum_{i=1}^{n'} \sum_{j=1}^{m'} \dfrac {n'}i \dfrac{m'}j \\ =&\sum_{g=1}^n\mu(g)\sum_{i=1}^{n'} \dfrac {n'}i\sum_{j=1}^{m'} \dfrac{m'}j \\ \end{aligned} $$
然后就可以预处理 $f(n)=\sum_{i=1}^n \dfrac ni$ 的值,每次询问就可以分块解决。之所以要预处理 $f(n)$,是因为在倒数第二步时如果采用直接计算 $\sum_{i=1}^{n'} \sum_{j=1}^{m'} \dfrac {n'}i \dfrac{m'}j$ 开销是很大的。但如果我们能预处理,就能做到 $\mathcal{O}(1)$ 计算。
预处理时间复杂度 $\mathcal{O}(n\sqrt{n})$,单次询问时间复杂度 $\mathcal{O}(\sqrt{n})$。
发现是 SDOI2015 约数个数和 的单询问加强版本,上面对 $\mu$ 前缀和的 $\mathcal{O}(n)$ 时间复杂度已经不能满足我们了,因此我们需要用杜教筛求出 $\mu(n)$ 前缀和,在 $\mathcal{O}(n ^{2/3})$ 时间内完成计算。
比较有意思的莫比乌斯反演题。
来我们写一下这个部分……(虚晃一枪)啊好,没写呢
莫比乌斯反演基本上离不开 GCD 和两个累和符号,而且通常通过将式子化为 $\varepsilon(n)$ 的形式,进而反演成 $\mu(n)$ 并提出相关变量的形式,简化式子进行计算。求解一般通过数论分块和预处理 $\mu(n)$ 前缀和的方式在 $\mathcal{O}(\sqrt{n})$ 时间内求和。