数论 | 容斥原理
容斥原理:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。
容斥原理
描述
若
其中
举例
我们用图片举例分析,我们要求
(图片和公式来源:维基百科,使用 CC BY-SA 3.0 协议)
代码实现
在容斥原理中,我们枚举了
我们可以将每种选择情况对应到一个
那么我们怎么得知某一位是否为 i >> n & 1
如果为
for (int i = 1; i < (1 << n); i++)
for (int j = 0; j < n; j++)
if (i >> j & 1)
...
实际应用中,往往需要按题目调整位运算的方式,但总体思路仍然是使用二进制数来遍历。
本文采用 CC BY-SA 4.0 许可,本文 Markdown 源码:Haotian-BiJi