基础莫比乌斯反演&&杜教筛&&数论推导学习笔记
前言:此文不仅包含莫反与杜教筛内容,也包含大量实际数学推导例题,简介内容摘自或搬运于 \(\text{OI}\) \(\text{Wiki}\)。
\(1.1\) 数论分块
引理 \(1\):\(\forall a,b,c\in \Z,\left\lfloor\cfrac{a}{bc}\right\rfloor=\left\lfloor\cfrac{\lfloor\frac{a}{b}\rfloor}{c}\right\rfloor\)
引理 \(2\):对于 \(\forall n\in \N_{+}\),\(\forall d\in \N_{+},d\leq n\),不同的 \(\lfloor\cfrac{n}{d}\rfloor\) 值的个数小于等于 \(\lfloor2\sqrt n\rfloor\)。
数论分块过程:含有 \(\lfloor\frac{n}{i}\rfloor\) 的求和式子。对于 \(\forall i\in [1,n]\),找到一个最大的 \(j(i\leq j\leq n)\),使得 \(\lfloor\frac{n}{i}\rfloor=\lfloor\frac{n}{j}\rfloor\),此时 \(j=\left \lfloor \cfrac{n}{\lfloor \frac{n}{i} \rfloor} \right \rfloor\),所以我们以 \([i,j]\) 为一块,分块求和即可。
\(1.2\) 积性函数&&常用数论函数
定义
若函数 \(f(n)\) 满足 \(f(1)=1\),且对于 \(\forall x,y\in\N_{+},gcd(x,y)=1\) 都有 \(f(xy)=f(x)f(y)\),则 \(f(n)\) 为积性函数。如果无需满足 \(gcd(x,y)=1\),则称 \(f(n)\) 为完全积性函数。
性质
若 \(f(x)\) 与 \(g(x)\) 都为积性函数,则以下函数也为积性函数:
记 \(x=\prod p_{i}^{k_{i}}\)
若 \(f(x)\) 为积性函数,则有 \(f(x)=\prod f(p_{i}^{k_{i}})\)。
若 \(f(x)\) 为完全积性函数,则有 \(f(x)=\prod f(p_{i})^{k_{i}}\)。
常用数论函数
单位函数:\(\epsilon(n)=[n=1]\)(完全积性)。
恒等函数:\(\text{id}_{k}(n)=n^{k}\),\(\text{id}_{1}(n)\) 通常记为 \(\text{id}(n)\)(完全积性)。
常数函数:\(\text{I}(n)=1\)(完全积性)。
除数函数:\(\sigma_{k}(n)=\sum\limits_{d|n}d^{k}\)。\(\sigma_{0}(n)\) 通常记为 \(\text{d}(n)\),\(\sigma_{1}(n)\) 通常记为 \(\sigma(n)。\)
欧拉函数:\(\varphi(n)=\sum\limits_{i=1}^{n}[\gcd(i,n)=1]\)
莫比乌斯函数:\(\mu(n)=\begin{cases} 1 & n=1\\ 0 & \exist d>1:d^{2}|n \\ (-1)^{\omega(n)} & otherwise \end{cases}\),其中 \(\omega(n)\) 表示 \(n\) 的本质不同质因子个数,它也是一个积性函数。
\(1.3\) 狄利克雷卷积 (\(\text{Dirichlet}\))
定义
两个数论函数 \(f,g\) 的 \(\text{Dirichlet}\) 卷积为 \((f*g)(n)=\sum\limits_{d|n}f(d)g(\cfrac{n}{d})\)
性质
\(\text{Dirichlet}\) 卷积满足实数运算的交换律,结合律以及分配律。
\(f*\epsilon=f\),即任何函数卷 \(\epsilon\) 都为其本身
常用 \(\text{Dirichlet}\) 卷积及拓展
\(2.1\) 莫比乌斯反演
公式
设 \(f(n),g(n)\) 为两个数论函数。
如果 \(f(n)=\sum\limits_{d|n}g(d)\),那么有 \(g(n)=\sum\limits_{d|n}\mu(d)f(\cfrac{n}{d})\)。
如果有 \(f(n)=\sum\limits_{n|d}g(d)\),那么有 \(g(n)=\sum\limits_{n|d}\mu(\cfrac{d}{n})f(d)\)。
可运用数论变换或卷积公式的方法来证明。
\(2.2\) 基础例题
现在要把之前学的东西开始应用了。
首先,容斥一波,设 \(f(n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\gcd(i,j)=k]\),则原式可以变为:
考虑求出 \(f(n,m)\),变为
根据反演的结论:\([\gcd(i,j)=1] \iff \sum\limits_{d\mid \gcd(i,j)} \mu(d)\),得到
改变一下枚举顺序,枚举 \(d\mid gcd(i,j)\),即当 \(d\mid i\) 且 \(d\mid j\) 时才产生贡献,有
\(\qquad \sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^{\lfloor \frac{n}{k} \rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{k} \rfloor} [d\mid i][d \mid j] \qquad\)
再交换一下枚举顺序,得
观察数据范围,可以直接数论分块求解,时间复杂度为 \(\Theta (N+T\sqrt n)\)。
此例题较为简单,适合做初学者(比如博主)的基础训练。其他题目将在 \(4.1\) 之后讲述。
\(3.1\) 杜教筛
对于一些数论函数的前缀和,可以利用杜教筛快速求出它们。
杜教筛的优势在于可以在小于线性的时间复杂度内求解数论函数的前缀和。对于数论函数 \(f\),要求计算 \(S(n)=\sum\limits_{i=1}^{n}f(i)\)。考虑构造一个 \(S(n)\) 关于 \(S(\lfloor \frac{n}{i}\rfloor )\) 的递推式。对于任意一个数论函数 \(g\),必满足
把等式右侧第一项拿到左边去,得到
\(g(1)S(n)=\sum\limits_{i=1}(f*g)(i)-\sum\limits_{i=2}^{n}g(i)S\left(\left\lfloor \cfrac{n}{i} \right\rfloor\right)\)
如果我们可以快速 \(\sum\limits_{i}^{n}(f*g)(i)\) 求和,并用数论分块对后面的值进行计算,即可以在较短时间内求出 \(g(1)S(n)\),而 \(g(1)\) 显然可以得到,故可以求出 \(S(n)\)。
\(3.2\) 基础例题
利用杜教筛求出两个常用数论函数的前缀和。即 \(\mu(n)\) 和 \(\varphi(n)\)。
莫比乌斯函数前缀和
套路的,设数论函数 \(f(n)=\mu(n)\),\(g(n)=\text{I}(n)\),则易得到 \(h=f*g=\mu * \text{I}=\epsilon\)。
又有 \(g(1)=1\),且数论函数 \(\epsilon\) 的前缀和非常好算,则有
发现这个东西我们可以用整除分块来解决。直接计算的时间复杂度为 \(O(n^{\frac{3}{4}})\)。考虑对于前 \(n^{\frac{2}{3}}\) 项用线性筛,则发现剩余部分的时间复杂度也为 \(O(n^{\frac{2}{3}})\)。对于较大的值,可以用 \(\text{map}\) 或高明的离散化存下对应的值。
欧拉函数前缀和
套路的,设数论函数 \(f(n)=\varphi(n)\),\(g(n)=\text{I}(n)\),\(h=f*g=\varphi*\text{I}=\text{id}\)。
\(g(1)=1\),且 \(\text{id}\) 的前缀和非常好算,为 \(S_{id}(n)=\cfrac{1}{2}n(n+1)\),则得到
当然,欧拉函数的前缀和在你用杜教筛求出了 \(\mu\) 可以用莫比乌斯反演直接求出。
求 \(S_{f}(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}[gcd(i,j)=1]\),显然有
直接整除分块即可得到答案。其他题目将在 \(4.1\) 之后讲述。