描述:
\quad 在计数时,必须注意没有重复,没有遗漏。
\quad 为了使重叠部分不被重复计算,人们研究出一种新的计数方法。
\quad 这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。
\quad 这种计数的方法称为容斥原理。
两个集合的容斥原理: 设
A
,
B
A, B
A,B是两个有限集合
那么
∣
A
+
B
∣
=
∣
A
∣
+
∣
B
∣
−
∣
A
B
∣
|A + B| = |A| + |B| - |AB|
∣A+B∣=∣A∣+∣B∣−∣AB∣
∣ A ∣ |A| ∣A∣表示A集合中的元素个数
三个集合的容斥原理: 设 A , B , C A, B, C A,B,C是三个有限集合
那么
∣
A
+
B
+
C
∣
=
∣
A
∣
+
∣
B
∣
+
∣
C
∣
−
∣
A
B
∣
−
∣
A
C
∣
−
∣
B
C
∣
+
∣
A
B
C
∣
|A + B + C| = |A| + |B| + |C| - |AB| - |AC| - |BC| + |ABC|
∣A+B+C∣=∣A∣+∣B∣+∣C∣−∣AB∣−∣AC∣−∣BC∣+∣ABC∣
这就叫容斥原理
一个例题:
Code:
#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int a,b,c;
long long m = 1e9;
scanf("%d %d %d",&a,&b,&c);
long long sum;
sum = m/a + m/b + m/c - m/a/b - m/b/c - m/a/c + m/a/b/c;
printf("%lld\n",m - sum);
}
return 0;
}