- Published on
容斥原理
- Authors

- Name
- Vegetog
定义
容斥原理是一种计数方法,用于计算有限集合的并集的大小。
两个集合
三个集合
通用公式
对于 个集合 :
或写为:
具体可用组合恒等式证明
例题
void solve(){
int n, m;
cin >> n >> m;
vector<int> a(m);
for (int i = 0; i < m; i++) cin >> a[i];
int ans = 0;
for (int i = 1; i < (1 << m); i++) {
int bt = 0;
i64 t = 1;
bool ok = 1;
for (int j = 0; j < m; j++) {
if (i >> j & 1) {
bt++;
t = lcm(t, a[j]); // 题目保证a[j]为质数,可以用乘
if (t > n) {
ok = 0;
break;
}
}
}
if (!ok) continue;
if (bt % 2 == 1)
ans += n / t;
else
ans -= n / t;
}
cout << ans << "\n";
}