I.Preface
一般来说,我们称以下这种关系叫做反演:
\[A_x=\sum_{i=0}^{+\infty}k(i,x)\cdot B_i \Leftrightarrow B_x=\sum_{i=0}^{+\infty}\mu(i,x)\cdot A_o
\]
常见的反演有二项式反演、莫比乌斯反演、子集反演、斯特林反演、单位根反演、拉格朗日反演等等。
为什么需要反演?
有了反演,在很多计数问题中可以有声东击西、围魏救赵、甚至指鹿为马、曲径通幽的效果。我们可以求出其它的一个在我们能力范围内的量,然后把我们要的东西通过反演求出来。这时反演的价值所在。
II.常见反演
1.二项式反演
\[A_n=\sum_{i=0}^n (-1)^i\cdot \begin{pmatrix} n \\ i \end{pmatrix}\cdot B_i \Leftrightarrow B_n=\sum_{i=0}^x(-1)^i\cdot \begin{pmatrix} n \\ i \end{pmatrix}\cdot A_i
\]
\[A_n=\sum_{i=0}^n \begin{pmatrix} n \\ i \end{pmatrix}\cdot B_i \Leftrightarrow B_n=\sum_{i=0}^n(-1)^{n-i}\cdot \begin{pmatrix} n \\ i \end{pmatrix}\cdot A_i
\]
\[A_n=\sum_{i=n}^{+\infty} (-1)^i\cdot \begin{pmatrix} i \\ n \end{pmatrix}\cdot B_i \Leftrightarrow B_n=\sum_{i=n}^{+\infty}(-1)^i\cdot \begin{pmatrix} i \\ n \end{pmatrix}\cdot A_i
\]
\[A_n=\sum_{i=n}^{+\infty} \begin{pmatrix} i \\ n \end{pmatrix}\cdot B_i \Leftrightarrow B_n=\sum_{i=n}^{+\infty}(-1)^{i-n}\cdot \begin{pmatrix} i \\ n \end{pmatrix}\cdot A_i
\]
其中最下面这个式子最重要!二维形式:
\[A_{n,m}=\sum_{i=n}\sum_{j=m} \begin{pmatrix} i \\ n \end{pmatrix}\cdot \begin{pmatrix} j \\ m \end{pmatrix}\cdot B_{i,j} \Leftrightarrow B_{n,m}=\sum_{i=n}\sum_{j=m}(-1)^{i+j}\begin{pmatrix} i \\ n \end{pmatrix}\cdot \begin{pmatrix} j \\ m \end{pmatrix}\cdot A_{i,j}
\]
二维形式的其它写法也是将一维形式的系数直接相乘以可,证明可以用两次一维形式的反演得到。
2. 莫比乌斯反演
\[f(n)=\sum_{d\mid n}g(d) \Leftrightarrow g(n)=\sum_{d\mid n}\mu(d)f(\frac{n}{d})
\]
\[f(n)=\sum_{n|d}g(d) \Leftrightarrow g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)
\]
3. 斯特林反演
我懒得打了,反正用的少......待补充吧!
III.Usage
纸上谈兵无用,下面直入主题,如何用呢?先说什么时候用吧!题目中有"恰好"字眼的!
比如说 [HAOI2018]染色 中的这段话:
然而小 C 只关心序列的 \(N\) 个位置中出现次数恰好为 \(S\) 的颜色种数, 如果恰好出现了 \(S\) 次的颜色有 \(K\) 种, 则小 C 会产生 \(W_k\) 的愉悦度.
再比如 [MtOI2018]情侣?给我烧了!:
你的任务是求出当 \(k = 0, 1, ... , n\) 时,共有多少种不同的就坐方案满足恰好有 \(k\) 对情侣是和睦的。
这时可以先旁敲侧击地求出一些量,然后峰回路转用反演定理把我们要求地量求回来。
一般来说这种题目求的那个量往往是"指定有 \(k\) 个的满足条件",这时和"恰好有 \(k\) 个"刚刚好可以用二项式反演。如染色这题中,设 \(G_k\) 为指定了 \(k\) 中颜色,其他任意的方案;\(F_k\) 为恰好 \(k\) 中颜色的方案,于是有:
\[G_k=\begin{pmatrix} m \\ S \end{pmatrix} \cdot \frac{n!}{(S!)^k\cdot(2n-2k)!}\cdot (m-k)^{n-kS}=\sum_{i=k}^{\min(\frac{n}{S},m)} \begin{pmatrix} i \\ k \end{pmatrix}\cdot F_i
\]
然后使用二项式反演,并使用 ntt 加速,就可以 \(O(n\log n)\) 完成这道题了。
还有就是用来解决 \(\sum [gcd(i,j)=C]\) 一类问题,详情可以看我的另一篇博客 SP20173 DIVCNT2 - Counting Divisors (square)。