数据结构与算法学习笔记----容斥原理

数据结构与算法学习笔记----容斥原理

@@ 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\ #include #include #include using namespace std; typedef long long LL; const int N = 20; int p[N]; int n, m; int main() { cin >> n >> m; for(int i = 0; i < m; i ++) cin >> p[i]; int res = 0; for(int i = 1; i < 1 << m; i ++) { int t = 1, cnt = 0; for(int j = 0; j < m; j ++) { if(i >> j & 1) { if((LL)t * p[j] > n) { t = -1; break; } t *= p[j]; cnt ++; } } if(t == -1) continue; if(cnt % 2) res += n / t; else res -= n / t; } cout << res << endl; return 0; } ```

相关推荐
水水沝淼㵘4 分钟前
嵌入式开发学习日志(数据结构--单链表)Day20
c语言·开发语言·数据结构·学习·算法
算法给的安全感6 分钟前
bfs-最小步数问题
java·算法·宽度优先
灏瀚星空20 分钟前
地磁-惯性-视觉融合制导系统设计:现代空战导航的抗干扰解决方案
图像处理·人工智能·python·深度学习·算法·机器学习·信息与通信
FAREWELL0007530 分钟前
Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制
学习·unity·c#·游戏引擎
唐僧洗头爱飘柔952738 分钟前
【英语笔记(三)】介绍谓语动词的分类,初步讲解四种基本状态:一般、进行、完成、完成进行
笔记·英语·谓语动词·动词时态·时态学习的难点
田梓燊39 分钟前
专业课复习笔记 7
笔记·算法
Go_going_39 分钟前
【js基础笔记] - 包含es6 类的使用
前端·javascript·笔记
郜太素1 小时前
PyTorch 中神经网络相关要点(损失函数,学习率)及优化方法总结
人工智能·pytorch·python·深度学习·神经网络·学习
健康胡1 小时前
仿射变换 与 透视变换
图像处理·人工智能·深度学习·opencv·算法·机器学习·计算机视觉
L_cl1 小时前
【Python 算法零基础 2.模拟 ④ 基于矩阵】
python·算法·矩阵