数据结构与算法学习笔记----容斥原理
@@ author: 明月清了个风
@@ first publish time: 2025.1.30
ps⭐️介绍了容斥原理的相关内容以及一道对应的应用例题。
Acwing 890. 能被整除的数
原题链接\]([890. 能被整除的数 - AcWing题库](https://www.acwing.com/problem/content/892/))
给定一个整数 n n n和 m m m个不同的质数 p 1 , p 2 , ⋯ , p m p_1,p_2,\\cdots,p_m p1,p2,⋯,pm。
请你求出 1 ∼ n 1 \\sim n 1∼n中能被 p 1 , p 2 , ⋯ , p m p_1,p_2,\\cdots,p_m p1,p2,⋯,pm中的至少一个数整除的整数有多少个。
#### 输入格式
第一行包含整数 n n n和 m m m。
第二行包含 m m m个质数。
#### 输出格式
输出一个整数,表示满足条件的整数的个数。
#### 数据范围
1 ≤ m ≤ 16 1 \\le m \\le 16 1≤m≤16,
1 ≤ n , p i ≤ 1 0 9 1 \\le n, p_i \\le 10\^9 1≤n,pi≤109
#### 思路
**容斥原理**是一种重要的组合数学方法,用于解决多个集合的元素计数问题。它的核心思想是通过对集合进行交集与并集的操作,减去重复计算的部分,从而准确地计算出多个集合的并集中元素的总数。
1. **两个集合的容斥原理**:
设 A A A和 B B B是两个集合,则它们的并集 A ∪ B A \\cup B A∪B的元素个数为:
∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ \|A \\cup B\| = \|A\| + \|B\| - \|A \\cap B\| ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
其中, ∣ A ∣ \|A\| ∣A∣和 ∣ B ∣ \|B\| ∣B∣分别是集合 A A A和 B B B的元素个数, ∣ A ∩ B ∣ \|A \\cap B\| ∣A∩B∣是集合 A A A和 B B B的交集的元素个数。
2. **三个集合的容斥原理**:
设 A A A、 B B B和 C C C是三个集合,则它们的并集 A ∪ B ∪ C A \\cup B \\cup C A∪B∪C的元素个数为:
∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ B ∩ C ∣ − ∣ C ∩ A ∣ + ∣ A ∩ B ∩ C ∣ \|A \\cup B \\cup C\| = \|A\| + \|B\| + \|C\| - \|A \\cap B\| - \|B \\cap C\| - \|C \\cap A\| + \|A \\cap B \\cap C\| ∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣B∩C∣−∣C∩A∣+∣A∩B∩C∣
其中, ∣ A ∣ \|A\| ∣A∣、 ∣ B ∣ \|B\| ∣B∣和 ∣ C ∣ \|C\| ∣C∣分别是集合 A A A、 B B B和 C C C的元素个数, ∣ A ∩ B ∣ \|A \\cap B\| ∣A∩B∣、 ∣ B ∩ C ∣ \|B \\cap C\| ∣B∩C∣和 ∣ C ∩ A ∣ \|C \\cap A\| ∣C∩A∣分别是集合 A A A和 B B B、 B B B和 C C C、 C C C和 A A A的交集的元素个数, ∣ A ∩ B ∩ C ∣ \|A \\cap B \\cap C\| ∣A∩B∩C∣是集合 A A A、 B B B和 C C C的交集的元素个数。
3. **n n n个集合的容斥原理**:
设 A 1 , A 2 , ... , A n A_1, A_2, \\ldots, A_n A1,A2,...,An是 n n n个集合,则它们的并集 A 1 ∪ A 2 ∪ ... ∪ A n A_1 \\cup A_2 \\cup \\ldots \\cup A_n A1∪A2∪...∪An的元素个数为:
∣ A 1 ∪ A 2 ∪ ... ∪ A n ∣ = ∑ i = 1 n ∣ A i ∣ − ∑ 1 ≤ i \< j ≤ n ∣ A i ∩ A j ∣ + ∑ 1 ≤ i \< j \< k ≤ n ∣ A i ∩ A j ∩ A k ∣ − ⋯ + ( − 1 ) n − 1 ∣ A 1 ∩ A 2 ∩ ... ∩ A n ∣ \|A_1 \\cup A_2 \\cup \\ldots \\cup A_n\| = \\sum_{i=1}\^{n} \|A_i\| - \\sum_{1 \\leq i \< j \\leq n} \|A_i \\cap A_j\| + \\sum_{1 \\leq i \< j \< k \\leq n} \|A_i \\cap A_j \\cap A_k\| - \\cdots + (-1)\^{n-1} \|A_1 \\cap A_2 \\cap \\ldots \\cap A_n\| ∣A1∪A2∪...∪An∣=∑i=1n∣Ai∣−∑1≤i\