数论反演、变换这一块

数论反演、变换这一块

1. 莫比乌斯函数

我们定义 \(\mu(n)= \begin{cases} 1&n=1\\ 0&n\text{ 含有平方因子}\\ (-1)^k&k\text{ 为 }n\text{ 的本质不同质因子个数}\\ \end{cases}\)

根据质因数分解不难发现 \(\mu(n)\) 是一个积性函数,可以线性筛出。

\(\mu(n)\) 同时具有着良好的性质:\([n=1]=\sum\limits_{d|n}\mu(d)\),拆质因子即可简证。

莫比乌斯反演:上面的式子启发我们,在遇到类似 \([\gcd=1]\) 的时候,可以拆成 \(\mu\) 的和,然后拆贡献整除分块。

莫反 Trick1:如果是 \(\gcd=d\),可以将参与 \(\gcd\) 的几个变量同时除以 \(d\),又转换为了 \([\gcd=1]\)

莫反 Trick2:遇到类似 \(\frac{n}{td}\) 的形式时,令 \(T=td\) 可以简化式子。

莫反 Trick3:当简化完毕后,将式子拆成几个部分,分别去做。

2. 狄利克雷前缀和

对于 \(g(n)=\sum\limits_{d|n}f(d)\)\(g(n)=\prod\limits_{d|n}f(d)\) 这样的一类数论函数,存在高效的 \(O(n\ln\ln n)\) 求出所有的 \(f(n)/g(n)\)

对于每个质因子拆贡献,不难发现 \(d\) 能贡献到 \(n\) 当且仅当 \(d\) 的所有质因子次数都小于 \(n\)。如果我们将每个质因子当成一维的话,那我们实际上需要求的是每个维护都要符合一个上界的所有数的和或积。这本质上就是一个高维前缀和,直接枚举每一维以及这一维的大小即可。复杂度即为 \(\sum\limits_{p\in \operatorname{Prime}}\frac{n}{p}=O(n\ln \ln n)\)

如果我们已知 \(g\),反推 \(f\) 的话也是同理,每次倒着减去除去一个质因子后的贡献即可。

3. 狄利克雷卷积

定义数论函数 \(f\)\(g\) 的狄利克雷卷积为 \(\sum\limits_{d|n}f(d)\times g(\frac{n}{d})\)

常见的狄利克雷卷积结论: \(\mu*1=\varepsilon,id*\mu=\varphi\)

欧拉反演\(\sum\limits_{d|n}\varphi(d)=n\),即 \(\varphi*1=id\)。这三个卷积是可以互推的,这个欧拉反演一般用于简化 \(\gcd\)。有的时候可以用欧反替代莫反。

4. 杜教筛

杜教筛是一种可以在比较优秀复杂度内求出积性函数、或特殊的非积性函数的前缀和的算法。

\(f(i)\) 代表原函数,\(s(i)\) 代表原函数的前缀和,即 \(\sum\limits_{i=1}^n f(i)\)

杜教筛的做法是,考虑构造出一个特殊的函数 \(g(i)\)。我们考虑 \(f\)\(g\) 的狄利克雷卷积,即 \(\sum\limits_{d|n}f(d)\times g(\frac{n}{d})\)

\(\sum\limits_{i=1}^n(f\cdot g)(i)=\sum\limits_{i=1}^n \sum\limits_{d|i}g(i)\times f(\frac{d}{i})=\sum\limits_{i=1}^n g(i)\times s(\lfloor\frac{n}{i}\rfloor)\)。我们考虑取出 \(g(1)\times s(n)\),则有 \(g(1)\times s(n)=\sum\limits_{i=1}^n(f\cdot g)(i)-\sum\limits_{i=2}^n(f\cdot g)(i)=\sum\limits_{i=1}^n(f\cdot g)(i)-\sum\limits_{i=2}^ng(i)\times s(\lfloor \frac{n}{i}\rfloor)\)

我们如果能快速求出 \(\sum\limits_{i=1}^n(f\cdot g)(i)\) 以及 \(g(i)\) 的前缀和,则剩下套个记忆化、整除分块递归地求 \(s\) 即可,因此 \(g(i)\) 的选取相当重要。

经过较为复杂的复杂度分析,可以得出杜教筛的复杂度为 \(O(n^{\frac{2}{3}})\)

5. 莫比乌斯变换

\(f(n),g(n)\) 为两个数论函数。

如果有 \(f(n)=\sum_{d|n}g(d)\),那么有 \(g(n)=\sum_{d\mid n}\mu(d)f(\frac{n}{d})\)

这个推论是可以互逆的。一个经典的应用是,求一个非特殊函数 \(f\)\(\mu\) 函数的狄利克雷卷积。

根据莫比乌斯变换,我们发现 \(f\) 就是我们要求的那个函数的狄利克雷前缀和。于是我们倒着狄利克雷前缀和即可。

6. gcd-lcm 变换

对于集合 \(S\),有 \(\operatorname{lcm}(S)=\prod\limits_{T\in S}\gcd(T)^{(-1)^{|T|+1}}\),可以拆质因子根据 min-max 容斥简证。

这启发我们,在式子中出现多元 \(\operatorname{lcm}\) 的时候,可以转成 \(\gcd\) 然后拆指数上的贡献。

例题:P11888 「Stoi2025」爱的飞行日记

前面推式子的部分不是啥难点,可以参考 P7360 一题。这里就简单提个思路。

根据 gcd-lcm 变换拆成 \(\gcd\),随后枚举每个 \(\gcd\) 计算指数上的贡献,可以直接莫反,计数部分需要一个组合数乘上一个幂。

可以发现指数上是一个 \(\sum a^ib^{n-i}\times C_{n}^i\) 的形式,考虑整体取逆、补齐系数然后二项式定理,再根据经典的「令 \(T=td\)」,指数项上变成了一个只含下取整除法的东西,于是就可以整除分块了。

此时你的式子应当长这样:\(\prod\limits_{T=1}^m(\prod\limits_{d|T}f_d^{\mu(\frac{T}{d})})^{m^n-(m-\left\lfloor\frac{m}{T}\right\rfloor)^n}\),指数上整除分块,现在考虑如何快速求出下面那坨,发现直接调和级数过不了,通过观察可以发现你取离散对数或取 \(\ln\) 之后它变成了狄利克雷卷积的模样,而且其中有一项是 \(\mu\)。可以直接硬套狄利克雷前缀和,复杂度 \(O(m\ln \ln m)\),注意到模数和 \(m\) 同级,考虑用线性求逆元的 trick 求出要用的所有逆元,指数上面那个 \(x^n\) 可以根据欧拉定理直接对模数的 \(\varphi\) 取模,那个 \(n\) 也可以根据扩展欧拉定理多取几次模,这样总复杂度就变成了 \(O(m\ln \ln m+T\sqrt m\log p)\),当然 \(\log\) 里是 \(n\) 也可以过。这个题可能需要卡常。

posted @ 2025-08-06 15:48  NagasakiSoyo  阅读(20)  评论(0)    收藏  举报