维什戴尔也能看懂的莫反和杜教筛(?
Nygglatho
·
·
个人记录
0x00 定义
积性函数定义为满足 \forall x,y,\gcd(x,y)=1,有 f(x)f(y)=f(xy) 的函数.
$$
\mu(x)=\begin{cases}1&x=1\\0&x\ \textsf{存在平方因子}\\(-1)^{\omega(x)}&\textsf{otherwise}\end{cases}
$$
$\omega(x)$ 表示 $x$ 的本质不同质因子个数.
$\varepsilon$ 为单位函数,$\varepsilon(n)=[n=1]$.
$1$ 为常数函数,$1(n)=1$.
$\mathrm{id}_k$ 为恒等函数,$\mathrm{id}_k(n)=n^k$.
$\sigma$ 为除数函数,$\sigma_k(n)=\sum\limits_{d\mid n}d^k$. $\sigma_0(n)$ 记为 $d(n)$.
$\varphi$ 为欧拉函数,$\varphi(n)=\sum\limits_{i=1}^n [\gcd(i,n)=1]$.
以上均为积性函数.
### 0x01 Dirichlet 卷积
两个数论函数 $f(x)$ 和 $g(x)$,定义其 Dirichlet 卷积 $f*g$ 为:
$$
(f*g)(x)=\sum\limits_{d\mid x}f(d)g(\dfrac{x}{d})
$$
即 $f(x)$ 和 $g(y)$ 的乘积贡献到 $(f*g)(xy)$ 中.
Dirichlet 卷积具有以下性质:
- 交换律:$f*g=g*f$.
- 结合律:$(f*g)*h=f*(g*h)$.
- 分配律:$(f+g)*h=f*h+g*h$.
- 单位元:$f*\varepsilon=f$.
我们有:$\mu*1=\varepsilon,\varphi*1=\mathrm{id}$.
::::info[证明 $\mu*1=\varepsilon$]
首先有:$(\mu*1)(n)=\sum\limits_{d\mid n}\mu(d)1(\dfrac{n}{d})=\sum\limits_{d\mid n}\mu(d)$.
即我们需要证明:$\sum\limits_{d\mid n}\mu(d)=[n=1]$.
对于 $n=1$,原式 $=\mu(1)=1$.
对于 $n>1$,考虑将 $n$ 质因数分解为 $n=p_1^{k_1}p_2^{k_2}p_3^{k_3}\cdots p_{\omega(n)}^{k_{\omega(n)}}$,显然若需要让 $\mu(d)\ne 0$,$d$ 只能是让 $p_i$ 选 $0$ 或 $1$ 个,枚举选了 $i$ 个不同的 $p$,显然此时 $\mu(d)=(-1)^i$,$d$ 有 $\binom{\omega(n)}{i}$ 种选法,则有:
$$
\sum\limits_{d\mid n}\mu(d)=\sum\limits_{i=1}^{\omega(n)}\binom{\omega(n)}{i}(-1)^i
$$
这是一个非常明显的二项式的形式,用二项式定理可得后面的部分为 $(1-1)^{\omega(n)}=0$,因此对于 $n>1,\sum\limits_{d\mid n}\mu(d)=0$.
得证.
::::
### 0x02 莫比乌斯反演
如果我们知道了 $f*1=g$ 和 $g$,根据前面的 $\mu*1=\varepsilon$ 以及 $f*\varepsilon=f$,我们有:
$$
\begin{aligned}
f*1&=g\\
f*1*\mu&=g*\mu\\
f*\varepsilon&=g*\mu\\
f&=g*\mu
\end{aligned}
$$
$g$ 称为 $f$ 的莫比乌斯变换,$f$ 称为 $g$ 的莫比乌斯反演.
然后莫反的一个常见用途是做形如 $[\gcd(x,y)=1]$ 这类限制的.
根据定义和 $\mu*1=\varepsilon$,上面这个就可以写成 $\sum\limits_{d\mid \gcd(x,y)}\mu(d)$ 或者 $\sum\limits_{d\mid x,d\mid y}\mu(d)$.
然后我们也可以证明前面的 $\varphi*1=\mathrm{id}$ 了.
:::info[证明]
我们有:$(\varphi*1)(n)=\sum\limits_{d\mid n}\varphi(d)$.
$$
\begin{aligned}
\sum\limits_{d\mid n}\varphi(d)
&=\sum\limits_{d\mid n}\sum\limits_{i=1}^d[\gcd(i,d)=1]\\
&=\sum\limits_{d\mid n}\sum\limits_{i=1}^d\sum\limits_{j\mid \gcd(i,d)}\mu(j)\\
&=\sum\limits_{d\mid n}\sum\limits_{j\mid d}\mu(j)\sum\limits_{i=1}^\tfrac{d}{j}&\textsf{此时}\ i\cdot j\ \textsf{为前面的}\ i.
\\
&=\sum\limits_{d\mid n}\sum\limits_{j\mid d}\mu(j)\dfrac{d}{j}\\
&=\sum\limits_{j\mid n}\mu(j)\sum\limits_{k\mid\tfrac{n}{j}}k&\textsf{令 }d=j\cdot k\\
&=\sum\limits_{j\mid n}\mu(j)\sigma(\dfrac{n}{j})
\end{aligned}
$$
即:$\varphi*1=\mu*\sigma$.
可以发现,根据 $\sigma(n)=\sum\limits_{d\mid n}d$ 的定义,我们有 $\sigma=\mathrm{id}*1$.
则有:$\varphi*1=\mu*(\mathrm{id}*1)=(\mu*1)*\mathrm{id}=\varepsilon*\mathrm{id}=\mathrm{id}$.
:::
### 0x03 一些经典题
就这类题目的 trick 基本上是把 $\gcd$ 提出来,提成 $[\gcd(x,y)=1]$ 的形式然后用前面的方法做.
::::info[[P3911](https://www.luogu.com.cn/problem/P3911)]
给定 $n$,长度为 $n$ 的序列 $a$,求 $\sum\limits_{i=1}^n\sum\limits_{j=1}^n \mathrm{lcm}(a_i,a_j)$.
:::info[Sol]
大力推柿子.
先令 $c_i$ 表示 $a$ 中等于 $i$ 的数的个数,$V$ 为值域.
$$
\begin{aligned}
\sum\limits_{i=1}^n\sum\limits_{j=1}^n\mathrm{lcm}(a_i,a_j)
&=\sum\limits_{i=1}^V\sum\limits_{j=1}^V \mathrm{lcm}(i,j)c_ic_j\\
&=\sum\limits_{i=1}^V\sum\limits_{j=1}^V\dfrac{ij}{\gcd(i,j)}c_ic_j\\
&=\sum\limits_{d=1}^V\sum\limits_{i=1}^V\sum\limits_{j=1}^V[\gcd(i,j)=d]\dfrac{ij}{d}c_ic_j\\
&=\sum\limits_{d=1}^V\sum\limits_{i=1}^{\left\lfloor\tfrac{V}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{V}{d}\right\rfloor}[\gcd(i,j)=1]i\cdot j\cdot d\cdot c_{id}\cdot c_{jd}&i\gets \dfrac{i}{d},j\gets \dfrac{j}{d}\\
&=\sum\limits_{d=1}^V\sum\limits_{i=1}^{\left\lfloor\tfrac{V}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{V}{d}\right\rfloor}\sum\limits_{k\mid \gcd(i,j)}\mu(k)\cdot i\cdot j\cdot d\cdot c_{id}\cdot c_{jd}\\
&=\sum\limits_{d=1}^V\sum\limits_{k=1}^{\left\lfloor\tfrac{V}{d}\right\rfloor}\mu(k)\sum\limits_{i=1}^{\left\lfloor\tfrac{V}{kd}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{V}{kd}\right\rfloor}i\cdot j\cdot d\cdot k^2\cdot c_{idk}\cdot c_{jdk}&\textsf{提出}\ k,i\gets\dfrac{i}{k},j\gets\dfrac{j}{k}\\
\textsf{令}\ T=kd\textsf{,}\\
&=\sum\limits_{T=1}^VT\sum\limits_{k\mid T}\mu(k)\cdot k\sum\limits_{i=1}^{\left\lfloor\tfrac{V}{T}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{V}{T}\right\rfloor}i\cdot j\cdot c_{iT}\cdot c_{jT}\\
\end{aligned}
$$
容易发现,右边这个式子组合意义是选两个物品(可相同),选第 $i$ 个权值为 $i\cdot c_{iT}$,求所有方案权值和,这个显然直接平方即可.
即:
$$
\begin{aligned}
\textsf{原式}&=\sum\limits_{T=1}^VT\sum\limits_{k\mid T}\mu(k)\cdot k\left(\sum\limits_{i=1}^{\left\lfloor\tfrac{V}{T}\right\rfloor}i\cdot c_{iT}\right)^2
\end{aligned}
$$
左边预处理,右边直接算,复杂度调和级数.
:::
::::
::::info[[P3312](https://www.luogu.com.cn/problem/P3312)]
有一张 $n\times m$ 的矩阵 $a$,有 $a_{i,j}=\sum\limits_{d\mid i,d\mid j}d$。多次给定 $v$,求 $\left(\sum\limits_{i=1}^n\sum\limits_{j=1}^m[a_{i,j}\le v]a_{i,j}\right)\bmod2^{31}$.
:::info[Sol]
考虑如果不考虑后面的限制怎么求 $\sum a_{i,j}$.
有:
$$
\begin{aligned}
\sum\limits_{i=1}^n\sum\limits_{j=1}^ma_{i,j}&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{d\mid i,d\mid j}d\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{d\mid \gcd(i,j)}d\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sigma(\gcd(i,j))\\
&=\sum\limits_{d=1}^{\min(n,m)}\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=d]\sigma(d)\\
&=\sum\limits_{d=1}^{\min(n,m)}\sigma(d)\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=d]\\
&=\sum\limits_{d=1}^{\min(n,m)}\sigma(d)\sum\limits_{i=1}^{\left\lfloor\tfrac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{m}{d}\right\rfloor}[\gcd(i,j)=1]\\
&=\sum\limits_{d=1}^{\min(n,m)}\sigma(d)\sum\limits_{i=1}^{\left\lfloor\tfrac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{m}{d}\right\rfloor}\sum\limits_{k\mid \gcd(i,j)}\mu(k)\\
&=\sum\limits_{d=1}^{\min(n,m)}\sum\limits_{k=1}^{\left\lfloor\tfrac{\min(n,m)}{d}\right\rfloor}\sigma(d)\mu(k)\sum\limits_{i=1}^{\left\lfloor\tfrac{n}{kd}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\tfrac{m}{kd}\right\rfloor}\\
&=\sum\limits_{d=1}^{\min(n,m)}\sum\limits_{k=1}^{\left\lfloor\tfrac{\min(n,m)}{d}\right\rfloor}\sigma(d)\mu(k)\left\lfloor\dfrac{n}{kd}\right\rfloor\left\lfloor\dfrac{m}{kd}\right\rfloor\\
&=\sum\limits_{T=1}^{\min(n,m)}\sum\limits_{d\mid T}\sigma(d)\mu(\dfrac{T}{d})\left\lfloor\dfrac{n}{T}\right\rfloor\left\lfloor\dfrac{m}{T}\right\rfloor&\textsf{令}\ T=kd
\end{aligned}
$$
然后显然对于询问 $v$,$a_{i,j}$ 有贡献当且仅当 $\sigma(d)\le v$.
然后这个左边仅和 $d,T,v$ 有关,右边和 $n,m$ 有关.
离线后按 $\sigma (d)$ 排序,把每次 $\sigma(d)\mu(\dfrac{T}{d})$ 贡献到 $d$ 的倍数即可.
查询就整除分块,左边是一个区间查询,右边 $O(1)$ 算,树状数组维护,复杂度 $O(n\ln n\log n+q\sqrt n\log n)$.
:::
::::