反演入门学习笔记
UniGravity
·
2024-09-18 19:01:59
·
算法·理论
前言
非常古老的存货了,怎么现在才想起来交/kk
资料主要来源于网上(oi-wiki、知乎、博客园)。
笔者水平有限,若有不足之处,欢迎您将您的意见私信给笔者。
闲话
本篇文章主要以感性理解为主,大部分补充的证明部分会以链接形式给出(绝对不是笔者不会证明),一些较为容易理解的证明会直接写出。
其实个人认为,这一类算法只需要大致理解思想,然后会运用式子就好。
这些反演的式子都非常的优美,基本上只要理解了思想就不怎么需要背了。
简要目录
Part 1. 二项式反演
Part 2. 子集反演(计划中)
Part 3. 莫比乌斯反演
反演概述
什么是反演?
简单理解一下,若能从 f 推出 g,则称之为正演。那么将其倒过来,用 g 反推出 f 就叫做反演了。形象生动的解释:正演与反演模拟理解 by
奶茶派。
反演的作用?
\footnotesize\text{答案}\stackrel{正演}\longrightarrow某个式子\stackrel{简单处理}\longleftarrow题目条件
\footnotesize\text{答案}\stackrel{\textbf{反演}}\longleftarrow某个式子\stackrel{简单处理}\longleftarrow题目条件
在 OI 中,反演一般长这样:
g_n=\sum 一堆系数\cdot f_i \longleftrightarrow f_n=\sum 一堆系数\cdot 用于去重的新式子\cdot f_i
可以发现这里的 g 是从一堆 f 加起来的,所以反演时需要进行去重。在二项式反演中,用于去重的就是 (-1)^x,而在莫反中则变成了莫比乌斯函数 \mu(x)。
二项式反演
理论
为什么要学二项式反演
二项式反演常用于解决至多(至少)和恰好之间的转换,常用于统计方案数。
一般来说,知道恰好后是能较为容易的推出至多的,我们这里先写一个式子(看不懂没关系下文有解答):
g(n)=\sum_{i=0}^n{n\choose i}\cdot f(i)
对柿子的解释
为什么会有 $n\choose i$ 呢?这是因为**任意**的 $i$ 个都能对产生 $f(i)$ 种方案,所以需要乘上 $n$ 中选 $i$ 个的方案数。
在题目中,一般 g 是较为好求的。那么接下来我们就要解决:如何从 g 反推回 f?
从二项式定理到容斥定理再回到二项式反演
注:下面讲述得出二项式定理的证明过程,可以略过直接跳步到二项式反演全家桶处。
这里推荐两篇文章,有详细的证明过程:
二项式反演及其应用 by GXZlegend
【瞎口胡】多步容斥和二项式反演 by Meatherm
\boxed{(a+b)^n=\sum_{i=0}^n{n\choose i}a^ib^{n-i}}
证明很妙,简单写一下:
将其拆开:(a+b)^n=(a+b)(a+b)\cdots(a+b)
发现实际上对于每个括号内都可以选 a 或选 b,这样就一共有 2^n 种可能,每种的贡献是 1。
那么假设选了 i 个 a,一共就有 n\choose i 个选法,也就是这一项的贡献就是 n\choose i!剩余的只能选择 b,于是就有 {n\choose i}a^ib^{n-i}。
将 i 从 0 枚举到 n,就证完了!
那么它和容斥定理又有什么关系呢?
这是容斥定理的形式:
\boxed{\left|\bigcup_{i=1}^n A_i\right|=\sum_{i}|A_i|-\sum_{i,j}|A_i\cap A_j|+\cdots+\sum(-1)^{n+1}\left|\bigcap_{i=1}^n A_i\right|}
简单来说,就是选 1 个的方案减去任意选 2 个的方案加上选 3 个的方案 \cdots
感性证明?
假设一个元素出现在 c 个集合中,那么左侧柿子由于是集合并起来,所以不管出现几次都只有 1 的贡献。那么我们只需要让右边的贡献也为 1 就全对了!
右侧是并,所以考虑全部都要选。枚举当前的 i,乘上容斥系数 (-1)^{i+1},这个时候你发现 i 个的选法就是从 c 中选,那么就有这个柿子:
\sum_{i=1}^c(-1)^{i+1}{c\choose i}=-\sum_{i=1}^c(-1)^i{c\choose i}
发现 i=1 其实不如 i=0 好做,于是你再加入一个:
(-1)^0{c\choose 0}-\sum_{i=0}^c(-1)^i{c\choose i}=1-\sum_{i=0}^c(-1)^i{c\choose i}
这个时候你发现 \sum_{i=0}^c(-1)^i{c\choose i} 的形式特别和上文 \sum_{i=0}^n{n\choose i}a^ib^{n-i} 相似,考虑转化:
1-\sum_{i=0}^c{c\choose i}(-1)^i1^{c-i}=1-(-1+1)^c=1-0=1)
证毕,对完了!
容斥?反演!
沿用一下刚刚证明的公式:
\left|\bigcup_{i=1}^n A_i\right|=\sum_{i}|A_i|-\sum_{i,j}|A_i\cap A_j|+\cdots+\sum(-1)^{n+1}\left|\bigcap_{i=1}^n A_i\right|
小学数学告诉我们,补集的交等于并的补集。记 A_i 补集是 B_i,于是我们改写一下:
\left|\bigcap_{i=1}^nB_i\right|=|U|-\sum_{i}|A_i|+\sum_{i,j}|A_i\cap A_j|-\cdots+\sum(-1)^n\left|\bigcap_{i=1}^n A_i\right|
而补集的补集变成了原集,于是将 B_i 和 A_i 互换有:
\left|\bigcap_{i=1}^nA_i\right|=|U|-\sum_{i}|B_i|+\sum_{i,j}|B_i\cap B_j|-\cdots+\sum(-1)^n\left|\bigcap_{i=1}^n B_i\right|
这两者只是 A,B 定义上的区别,系数完全一样,能不能把它们联系起来呢?
记 f(i) 表示 i 个 A 集合的交集大小,g(i) 表示 i 个 B 集合的交集大小。这里是一种特殊情况:即任意的 i 个集合 A 交起来是的大小相等,但同样也满足上面那个柿子。
则有:
g(n)=\sum_{i=0}^n(-1)^i{n\choose i}f(i)
看起来非常的对称。需要注意的是,其中的 f(0)=g(0)=|U|,这样就能与上述式子相符了。
注意:在真正做题的时候,我们只知道 f,g,而无需考虑上面证明时提到的集合。换句话说,这只是一种较为简单易懂的证明方式,二项式反演虽然形式上和多步容斥极为相似,但它们并不等价。
二项式反演全家桶
形式 0(其实并不常用):
g(n)=\sum_{i=0}^n(-1)^i{n\choose i}f(i)\Leftrightarrow
f(n)=\sum_{i=0}^n(-1)^i{n\choose i}g(i)
}
形式 1(至多与恰好的转换):
g(n)=\sum_{i=0}^n{n\choose i}f(i)\Leftrightarrow
f(n)=\sum_{i=0}^n(-1)^{n-i}{n\choose i}g(i)
}
证明:
设 h(i)=(-1)^if(i)
\frac{h(n)}{(-1)^n}=\sum_{i=0}^n(-1)^{n-i}{i\choose n}g(i)
形式 2(至少与恰好的转换,非常常用):
g(n)=\sum_{i=n}^N{i\choose n}f(i)\Leftrightarrow
f(n)=\sum_{i=n}^N(-1)^{i-n}{i\choose n}g(i)
}
证明先咕着,可以看推荐阅读材料。
值得注意的是,其实式子中的 N 应该被 +\infty 代替,但是题目中一般大于 N 的 g 就没有值了,对答案没有贡献,可以省略。
例题
BZOJ2839 集合计数
一个有 N 个元素的集合有 2^N 个不同子集(包含空集),现在要在这 2^N 个集合中取出若干集合(至少一个),使得它们的交集的元素个数为 K,求取法的方案数,答案模 10^9+7。
发现元素个数恰好是 k 很不好做,考虑使用二项式反演转化成至少 k 个。
假设 g(x) 表示交集至少有 x 个元素的方案数。首先发现的是包含这 x 个元素的集合一共会有 2^{n-x} 个,由于是交集,只需要在这些集合中选出若干个即可,方案数是 2^{2^{n-x}}-1,因为如果都不选就不满足至少一个的条件。
但是需要注意,这 x 个元素可以从 n 中任意选择,所以答案其实是 g(x)={n\choose x}(2^{2^{n-x}}-1)。
直接上形式二:
f(k)=\sum_{i=k}^n(-1)^{i-k}{i\choose n}g(i)
复杂度是 O(n\log n) 的,非常优秀。
但是这样就做完了吗?你会发现你喜提 WA 30pts。
这是因为 2^{2^{n-x}}-1 是要 \bmod P\ (P=10^9+7) 的。此时内部的 2^{n-x} 就不是 \bmod P 而是 \bmod(P-1) 了。
为什么?
根据费马小定理,x^{p-1}\bmod p=1,就有 x^c\bmod p=x^{\left\lfloor\frac{c}{p-1}\right\rfloor(p-1)+c\bmod(p-1)}\bmod p=x^{c\bmod(p-1)}\bmod p
P5505 [JSOI2011] 分特产
注:这题并不完全算二项式反演,而和容斥关系更大。不过使用二项式反演有助于更好理解题目含义。
有 n 个有标号的盒子和 m 种有标号的球,每种球有 a_i 个,求每个盒子至少放一种球的总方案数。
套路地,设 g(x) 表示钦定(也就是至少)x 个盒子为空的方案数,这样其他的盒子就可以随便选了。
考虑插板法,n 个盒子放 m 个球的方案数是 n+m-1\choose n-1,即 n+m-1 个空隙中任意插板子。那么有:
g(x)={n\choose x}\times\prod_{i=1}^m{a_i+n-i-1\choose n-i-1}
解释:前面的组合数是因为盒子是有标号的,后面的式子可以根据乘法原理得出。
接下来就到了二项式反演的重点:至少转恰好。这里求恰好 0 个盒子为空,套用形式二,则有:
f(0)=\sum_{i=0}^{n-1}(-1)^ig(i)
P4859 已经没有什么好害怕的了
反演 + dp 好题。
给出长度为 n 的序列 a,b,要求两两配对使得 a>b 的对数量减去 a
发现直接做是困难的,因为不确定如何匹配。考虑可以先钦定 x 个数对满足 a_i>b_i,剩下的随意排列,乘上 (n-x)!。当然,这样只能算出至少 x 个满足的情况,只需进行二项式反演即可。
考虑怎么求方案数,首先对 a,b 排序,便于找出存在多少个 b_j g_{i,j}=g_{i-1,j}+(c_i-(j-1))g_{i-1,j-1} 解释: 前面的 g_{i-1,j} 不用乘是因为在最后进行二项式反演时才会乘上 (n-j)!。 最后有 a>b 对数应该是 tot=\frac{k+n}{2},注意判一下无解。式子: ans=\sum_{i=tot}^n(-1)^{i-tot}{i\choose tot}\cdot (n-i)!\cdot g_{n,i} 子集反演 理论 子集反演和二项式反演 子集反演其实与二项式有着很大的联系:例如证明过程相似,都是处理恰好与至少至多的关系等等。可以看作是集合角度的二项式反演。 假如题目给你 n 个元素(或是转换为 n 个条件等形式),让你求 f(S) 表示恰好选择 S 中的点的方案数,参照前面的思想,如果当 f(S) 求解困难时,可以记 g(S) 表示至多选 S 中这些点的方案数。 如果钦定 T 是满足条件的那个,显然有 g(S)=\sum_{T\subseteq S}f(T)。那么直接给出反演式子: \boxed{f(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(T)} 可以看出这个式子同样具有优美的对称性。可以感性理解成一个容斥的过程,证明可以看补充资料: 子集反演学习笔记 - Pbri 【推导】子集反演的形式化推导 - 王学逸 当然,与二项式类似,其还有至少与恰好的转换形式: \boxed{f(T)=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(S)} 那么我们直接开始例题。 例题 一个规律是,由于子集反演需要枚举子集,其较高的时间复杂度使得一般题目的数据范围都较小。 子集反演经常与 dp 和生成树、矩阵等有关,所以有些题先咕着。 莫比乌斯反演 理论 从狄利克雷卷积开始 注:初学可能较为困难,仅作为理解。可以跳过(直接到例子处)。 (f\ast g)(x)=\sum_{d|x}f(d)g\left(\frac{n}{d}\right)\Leftrightarrow \sum_{ij=x}f(i)g(j) } \tiny\uparrow其实不用完全理解上面的式子\uparrow 其中后面的式子是对称形式,较为便于理解。 感性理解一下,狄利克雷卷积是有关于因数的卷积: 卷:对于每一对乘积等于 x 的 f 和 g,将其分别相乘。 积:所有因数对的答案之和。 例子 为了便于推出莫比乌斯函数与反演,我们举个例子: 假设有: g=f\times c 如果知道了 g,怎么求 f? f=g\times\frac{1}{c} 从原来的 c 变为 \frac{1}{c},其实就是将其变为倒数。 在 f 不好求的情况下,我们只需求出 g 和 c 便可以逆推出 f,这就是反演的思想。 狄利克雷卷积的律 狄利克雷卷积满足交换律、结合律、分配律(证明:狄利克雷卷积和莫比乌斯反演 by 秋钧)。 是不是很像我们接触的乘法?「卷积」中的「积」就来源于此。 在狄利克雷卷积中,原来的符号 \times 变为了卷积的式子(上面)。接下来我们开始介绍数论函数: 数论函数全家桶 数论函数 定义域为整数,值域为实数。 即 x\in\mathbb{N},f(x)\in\mathbb{R}。 单位元函数 \boxed{\epsilon(x)=[x=1]} 艾佛森括号 1 & \mathtt{如果\space P\space 成立}\\ 0 & \mathtt{otherwise} \end{cases} 艾佛森括号可以大大简化公式的书写,如上文的 \epsilon(x),在 x=1 时 \epsilon(1)=1,其他时候均为 0。 根据上面的例子,我们也可以将其类比为狄利克雷卷积中的 1。 单位元函数是一个积性函数。 积性函数 对于所有互质的整数 a,b,都有 f(ab)=f(a)f(b)。 完全积性函数则更进一步,对于任意整数 a,b,都有 f(ab)=f(a)f(b)。 常数函数 \mathbf{1}(x)=1 没错,就这么简单! 引入正题 狄利克雷逆 \boxed{f\ast f^{-1}=\epsilon} 限于篇幅,关于 $f^{-1}$ 的具体狄利克雷逆展开,推荐[狄利克雷卷积和莫比乌斯反演 by Xecades](https://zhuanlan.zhihu.com/p/390895860)。 --- #### 莫比乌斯函数与常数函数 莫比乌斯函数的定义其实是这样的: $$\boxed{\mu=\mathbf{1}^{-1}}$$ 即其是**常数函数**的逆元。 展开后就成了: $$\boxed{\mu(x)=\begin{cases} 1 & x=1\\ 0 & \exists p\in\mathbb{N}^+,p^2|x &\mathtt{即\space} x\mathtt{\space 含有平方因子}\\ (-1)^k & \mathtt{otherwise} & k\mathtt{\space 是\space} x \mathtt{\space 的素因子个数} \end{cases}}$$ 还记得一开始的例子吗? 若 $g(x)=f(x)\ast\mathbf{1}$,则 $f(x)=g(x)\ast\mu 将其全部展开狄利克雷卷积后: g(x)=\sum_{d|n}f(d)\Leftrightarrow f(x)=\sum_{d|n}\mu\left(\frac{n}{d}\right)g(d) } 注:为了对称,\sum_{d|n}\mu\left(\frac{n}{d}\right)g(d) 可以写成 \sum_{ij=n}\mu(i)g(j)。 另一个特殊的性质: \sum_{d|n}\mu(d)=[n=1] 把 n 换成 \gcd(i,j): \sum_{d|\gcd(i,j)}\mu(d)=[\gcd(i,j)=1] } 我们将在例题中详细讲述其应用。 线性筛 不过好在其是**积性函数**,直接上代码(线性筛基本可以求所有的积性函数): ```cpp void initmu() { mu[1] = 1; for (int i = 2; i <= n; ++i) { if (!flg[i]) p[++tot] = i, mu[i] = -1; // 定义 for (int j = 1; j <= tot && i * p[j] <= n; ++j) { flg[i * p[j]] = 1; if (i % p[j] == 0) { mu[i * p[j]] = 0; // 平方因子 break; } mu[i * p[j]] = -mu[i]; // 多一个因子 } } } ``` ## 例题 ### [P2522 [HAOI2011] Problem b](https://www.luogu.com.cn/problem/P2522) > 求: > $$\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]$$ 注:以下默认 $n > 还记得吗? > $$\sum_{d|\gcd(i,j)}\mu(d)=[\gcd(i,j)=1]$$ 要将其转换为上面这个格式,只需要把 $k$ 变为 $1$(可以思考一下为什么能这么转换): $$\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor}[\gcd(i,j)=1]$$ 大力上莫比乌斯: $$\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor}\sum_{d|\gcd(i,j)}\mu(d)$$ 换个角度,先枚举 $d$ 再找满足 $d|\gcd(i,j)$ 的 $i$ 和 $j$: $$\sum_{d=1}^n\mu(d)\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor}[d|\gcd(i,j)]$$ 发现满足 $d|\gcd(i,j)$ 的 $i,j$ 可以直接算: $$\sum_{d=1}^n\mu(d)\sum_{i=1}^{\lfloor \frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{kd}\rfloor}1$$ $$\sum_{d=1}^n\mu(d)\lfloor \frac{n}{kd}\rfloor\lfloor \frac{m}{kd}\rfloor$$ $O(n)$ 算,解决! 总结一下: 一开始求的是 $\sum[1=\gcd(i,j)]$,运用**恰好难算包含好算**的思想,化为 $\sum[d|\gcd(i,j)]$,此时就去掉了枚举的 $\sum$,这是这样一类问题的经典套路。 ### [P1829 [国家集训队] Crash的数字表格 / JZPTAB](https://www.luogu.com.cn/problem/P1829) > 求: > $$f(n,m)=\sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(i,j)$$ > ~~$\operatorname{lcm}$ 看起来不顺眼~~。我们知道,$\operatorname{lcm}(a,b)=\frac{ab}{\gcd(a,b)}$,~~读者自证不难~~。 于是把它换成 $\gcd$: $$f(n,m)=\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{\gcd(i,j)}$$ 这一步非常关键,**由于 $\gcd$ 在分母不好处理,我们设法将其拎出来**。 由 $\gcd$ 的定义引入 $d=\gcd(i,j)$: $$f(n,m)=\sum_{i=1}^n\sum_{j=1}^m\sum_{d|i,d|j,\gcd(\frac{i}{d},\frac{j}{d})=1}\frac{ij}{d}$$ 这一步也很关键,**需要注意的是 $i,j$ 的定义发生了变化**。 $i$ 变成了 $\frac{i}{d}$,这样的话 $\frac{ij}{d}$ 会少算一个 $d$,在前面补上: $$f(n,m)=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1]\cdot ij$$ $\gcd$ 被成功从分母转换到了外面,可喜可贺。发现后面依托 $\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1]\cdot ij$ 是一个新的式子,记: $$g(n,m)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1]\cdot ij$$ 那么就有: $$f(n,m)=\sum_{d=1}^nd\cdot g(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$$ 发现如果可以快速算出 $g(x,y)$,就可以直接上**数论分块**求解。 接下来到了推 $g(n,m)$ 式子的时候: $$g(n,m)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1]\cdot ij$$ 这不就是上文说的套路吗,直接把 $\gcd(i,j)$ 展开: $$g(n,m)=\sum_{i=1}^n\sum_{j=1}^mij\sum_{t|\gcd(i,j)}\mu(t)$$ 把 $t$ 提到前面去: $$g(n,m)=\sum_{t=1}^n\sum_{t|i}^n\sum_{t|j}^m\mu(t)ij$$ 注意**这里 $i,j$ 的含义又发生了变化**,和上文类似,$i$ 变成了 $\frac{i}{t}$。 那么 $ij$ **少算了** $t^2$,加到前面去: $$g(n,m)=\sum_{t=1}^n\mu(t)t^2\sum_{i=1}^{\lfloor\frac{n}{t}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{t}\rfloor}ij$$ 前面的 $\sum_{t=1}^n\mu(t)t^2$ 可以预处理,再看后面,记: $$h(n,m)=\sum_{i=1}^{n}\sum_{j=1}^{m}ij$$ 这下简单了,直接展开: $$h(n,m)=\sum_{i=1}^{n}i\cdot\frac{m(m+1)}{2}$$ $h(n,m)$ 可以 $O(1)$ 计算: $$h(n,m)=\frac{n(n+1)}{2}\cdot\frac{m(m+1)}{2}$$ 那么就有: $$g(n,m)=\sum_{t=1}^n\mu(t)\cdot t^2\cdot h(\lfloor\frac{n}{t}\rfloor,\lfloor\frac{m}{t}\rfloor)$$ 再套一个数论分块即可。~~禁止套娃~~,但是时间复杂度比线性预处理快。总体是 $O(n)$ 的。 ### 口糊题 > 给你长度为 $n$ 的序列 $a$,选出两个互质的数 $a_i,a_j$ 使得 $a_i+114^{514}a_j$ 的值尽量小。 > $n,a_i\le10^6$。 算是莫反的综合运用吧,不是单纯推柿子了。 非常显然的有我们要尽可能让 $a_j$ 小,可以考虑把数组排序然后对于每一个 $a_i\ (i=1\to n)$ 看看是否有互质的另一个数。 但是你发现遇到了瓶颈:$O(n^2)$ 的优化非常困难。 这个时候你注意到一个神仙性质:如果 $a_i$ 对应有解就可以直接 $O(n)$ 扫一遍 $a_j$ 一个一个试,因为不用再考虑 $i$ 更大的情况了!那么问题就变为了如何快速 check 是否存在 $a_j$ 与 $a_i$ 互质。 此时终于等到主角登场,我们只需要考虑下面这个式子: $$ans=\sum_{i=1}^n[\gcd(x,a_i)=1]$$ 其中 $x$ 就是要 check 的 $a_i$ 的值,如果 $ans\neq0$ 就对完了!继续推: $$\sum_{i=1}^n[\gcd(x,a_i)=1]=\sum_{i=1}^n\sum_{d|x,d|a_i}\mu(d)=\sum_{d|x}^n\sum_{i=1}^n[d|a_i]\cdot\mu(d)$$ 发现对于每个 $d$,$\sum_{i=1}^n[d|a_i]\cdot\mu(d)$ 都是可以快速处理的,只需要枚举倍数即可。这样复杂度是 $O(m\log m)$ 的($m$ 是值域)。 同样地,知道这个值后还是枚举倍数将答案加到对应的 $x$ 上。 这样我们就惊奇的发现你成功做完了这道题!时间复杂度是 $O(m\log m+n\log m)$ 的。前面是预处理,后面是 check 之后直接暴力扫一遍数组。 ### 套路总结 1. 转化成 $\gcd$ 式子的形式。 2. 对 $\gcd$ 上莫反。 3. 推出更可做的形式(如数论分块)。 4. 解决原问题。 # 后记 均按出现顺序排列。 ### 参考文献 * [排列组合 - OI-wiki](https://oi-wiki.org/math/combinatorics/combination/) * [容斥原理 - OI-wiki](https://oi-wiki.org/math/combinatorics/inclusion-exclusion-principle/) * [正演与反演模拟理解 - 奶茶派](https://blog.csdn.net/lijiwu666/article/details/132556991) * [二项式反演及其应用 - GXZlegend](https://www.cnblogs.com/GXZlegend/p/11407185.html) * [【瞎口胡】多步容斥和二项式反演 - Meatherm](https://www.cnblogs.com/Meatherm/p/16640448.html) * [子集反演学习笔记 - Pbri](https://www.cnblogs.com/Pbriqwq/p/15429971.html) * [【推导】子集反演的形式化推导 - 王学逸](https://www.cnblogs.com/wxywxywxy/p/15205488.html) * [莫比乌斯反演 - OI-wiki](https://oi-wiki.org/math/number-theory/mobius/) * [狄利克雷卷积和莫比乌斯反演 - 秋钧](https://zhuanlan.zhihu.com/p/646539446) * [狄利克雷卷积和莫比乌斯反演 - Xecades](https://zhuanlan.zhihu.com/p/390895860) ### 公式合集 二项式定理 $$\boxed{(a+b)^n=\sum_{i=0}^n{n\choose i}a^ib^{n-i}}$$ 容斥定理 $$\boxed{\left|\bigcup_{i=1}^n A_i\right|=\sum_{i}|A_i|-\sum_{i,j}|A_i\cap A_j|+\cdots+\sum(-1)^{n+1}\left|\bigcap_{i=1}^n A_i\right|}$$ 二项式反演形式零 $$\boxed{ g(n)=\sum_{i=0}^n(-1)^i{n\choose i}f(i)\Leftrightarrow f(n)=\sum_{i=0}^n(-1)^i{n\choose i}g(i) }$$ 二项式反演形式一 $$\boxed{ g(n)=\sum_{i=0}^n{n\choose i}f(i)\Leftrightarrow f(n)=\sum_{i=0}^n(-1)^{n-i}{n\choose i}g(i) }$$ 二项式反演形式二 $$\boxed{ g(n)=\sum_{i=n}^N{i\choose n}f(i)\Leftrightarrow f(n)=\sum_{i=n}^N(-1)^{i-n}{i\choose n}g(i) }$$ 子集反演形式一 $$\boxed{f(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(T)}$$ 子集反演形式二 $$\boxed{f(T)=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(S)}$$ 狄利克雷卷积 $$\boxed{ (f\ast g)(x)=\sum_{d|x}f(d)g\left(\frac{n}{d}\right)\Leftrightarrow \sum_{ij=x}f(i)g(j) }$$ 单位元函数 $$\boxed{\epsilon(x)=[x=1]}$$ 狄利克雷逆 $$\boxed{f\ast f^{-1}=\epsilon}$$ 莫比乌斯函数 $$\boxed{\mu=\mathbf{1}^{-1}}$$ $$\boxed{\mu(x)=\begin{cases} 1 & x=1\\ 0 & \exists p\in\mathbb{N}^+,p^2|x &\mathtt{即\space} x\mathtt{\space 含有平方因子}\\ (-1)^k & \mathtt{otherwise} & k\mathtt{\space 是\space} x \mathtt{\space 的素因子个数} \end{cases}}$$ 莫比乌斯反演形式一 $$\boxed{ g(x)=\sum_{d|n}f(d)\Leftrightarrow f(x)=\sum_{d|n}\mu\left(\frac{n}{d}\right)g(d) }$$ 莫比乌斯反演形式二 $$\boxed{ \sum_{d|\gcd(i,j)}\mu(d)=[\gcd(i,j)=1] }$$