容斥原理

· · 个人记录

容斥原理

引入

先来举一个例子:

1000 以内能够被 235 整除的数的个数

分别去求能被 2/3/5 整除的数个数是比较简单的。那我们可以设 A 代表能够被 2 整除的数的集合,B 代表能够被 3 整除的数的集合,C 代表能够被 5 整除的数的集合。那么我们所要求答案就是 |A \cup B \cup C|

简单一想,就知道这个答案并不等同于 |A| + |B| + |C|,原因就是这里面有不少重复计算的值。

我们接下来观察一张图:

从图中可得,虽然我们将一些值重复计算了 2 次甚至是 3 次,但是我们可以通过求交集的方式来得到它们,然后就能轻松的得到答案,所以我们有了下面这个式子:

|A \cup B \cup C| &= (|A| + |B| + |C|) - (|A \cap B| + |A \cap C| + |B \cap C|) + |A \cap B \cap C| \end{aligned}

容斥原理

我们观察上面那个式子,虽然有加有减,但是不难发现加和减是交替出现的,所以我们可以通过特殊情况下的式子推出普遍适用的式子:

|\bigcup_{i = 1}^n S_i &= \sum_{1 \le i \le n}|S_i| - \sum_{1 \le i < j \le n}|S_i \cap S_j| + \dots + (-1)^{n - 1}|S_1 \cup S_2 \cup \dots \cup S_{n - 1} \cup S_n| \\ &= \sum_{i = 1}^n (-1)^i \sum \end{aligned}

未完待续......