先来看一下对于容斥原理的定义,引用百度百科

容斥原理_百度百科

现在,假定已经能够熟悉这个原理的基本内容,下面是对容斥原理的一些解释。

为了方便说明,我们把全集设为三个集合的并集A1, A2, A3

我们要求全集的基数,由容斥原理的定义可知,我们可以对单独的子集求基数,然后再减去多计算的部分即可。

很简单的两步

1.每个集合基数单独计算

2.将多减去的部分加上即可

对于容斥原理的难点,主要是第二部分。

我们会发现,在执行第二步的时候,会多减去一部分,也有可能不多减,这是子集的交集为空集的情况,然后我们会发现,我们又多加了一部分,然后依次递归,直到最后的交集是所有子集的交集的情况,因为这样的时候,前面所有的多加多减去的部分已经计算完成,只剩下最后的这一部分。

我们看这个公式

https://bkimg.cdn.bcebos.com/formula/c14b2ae75dc2656967cb2e2dedbe57cd.svg

这个公式即是对上述所说的解释。

对于(-1)^m-1这里,可以说明以下。

对于两个子集的时候,只需要减去多加的部分,即| A1交A2 |

对于三个子集的时候,在减去多加的部分的同时,怎么保证A1, A2, A3的交集不为空?

它肯定有空的时候,这是毫无疑问的,但是也有不为空的时候,这也是毫无疑问的。

那既然有不为空的时候,那怎么保证两两子集交集不会与A1,A2,A3的交集重合?既然这样,就会有多减的时候,那么再将多减去的再加回来即可。

为用数学公式统一,那么无论如何都加一下不就可以了吗?

对于四个子集的时候,怎么保证对于每三个子集交集不会有与四个子集的交集重复的情况,那这是不是又多减去了一部分?

......

上述即是 (-1)^m-1的正确性

方便使用数学的公式统一,可以更精简的写成这种形式

https://bkimg.cdn.bcebos.com/formula/8235e8b08ec7fc0c668a225a1146711b.svg

一些应用

求解欧拉函数

欧拉函数的定义是,小于n并且与n互素的数从的个数

首先任何一个自然数,都能分解为素数的乘积形式,并且,有且只有一种情况。

比如10可以分解为2*5,既然这样,任何能被5和2整除的数和10都不能为素数。

那么全集就是1-10所有自然数,应用容斥原理。

要从U中寻找和10互素的数,可以用全集的基数减去是2 倍数的数5两个子集

A:2的倍数

B:5的倍数

ans = 9 - 4 - 1 + 0 = 4

验证:1 3 7 9

正确

推广形式

对于一个自然数n,可以将其拆分为这样的形式

Ai为i倍数组成的集合

然后有

用~A表示补集 |__| 表示向下取整

F(n) = |~A1 交 ~A2 ... 交~Ak|

可计算 |Ai| = |_n/pi_|

所以

|Ai 交Aj| = |_n/pi*pj_|

经过一系列计算可得(不写过程了,电脑上打公式属实折磨)

最后得出的结论

F(x)  = n(1 - 1/p1)(1- 1/p2) ... (1 - 1/pk)

离散数学——容斥原理相关推荐

  1. 离散数学 - 容斥原理

    第1关:埃拉托斯特尼筛法 本关任务:使用埃拉托斯特尼筛法找某个区间内的所有素数. #coding=utf-8 import sympy as sym ''' 说明: 100的平方根为10,所以只要先计 ...

  2. 离散数学/组合数学:序列与其对应的生成函数;多项式函数的系数与序列的联系;重复组合数的理解方法即----全1序列对应的生成函数做n重卷积(不严谨说法)之后得到的序列的x的k次方项的系数;莫比乌斯反演。

    继我所写的文章 "迭代.递归.栈.差分方程之间的本质联系以及由推广的迭代法解决"变态青蛙跳台阶"问题" 结束之后,自然的引出一个问题,就是关于如果真的给定k项之 ...

  3. 【离散数学】集合论 第三章 集合与关系(3) 集合计数的加法原理、容斥原理

    本文属于「离散数学」系列文章之一.这一系列着重于离散数学的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数学知识, ...

  4. 离散数学/组合数学:利用容斥原理,求满射函数的个数,注意它容斥原理求得的是”非满射函数的个数”,以在A到B形成的函数的总个数为“全集“求该全集中”非满射函数的个数”的补集才是目标个数。

    用能够形成的总函数个数为全集,利用容斥原理求得各类非满射的函数的个数再求其补集才是所求. 这里利用的考察元素的方法 我们依次考察"b1不在值域"+"b2不在值域" ...

  5. 运用计算机计算包含排斥原理,离散数学包含及排斥原理.ppt

    离散数学包含及排斥原理 第三章 集合与关系 * 一.有限集的计数 一个集合若其组成集合的元素个数是有限的,则称作有限集. 设A1.A2为素个数分别记为|A1|,|A2| P96有限集记数有如下几个性质 ...

  6. 《离散数学》双语专业词汇表 名词术语中英文索引

    <离散数学>双语专业词汇表 set:集合 subset:子集 element, member:成员,元素 well-defined: 良定,完全确定 brace:花括号 represent ...

  7. 离散数学及其应用傅彦pdf_《离散数学及其应用》第二章 计算与探索

    C++实现: 1. 由于只用实现两个有限集的笛卡尔积,应该就是回顾概念吧. #include <iostream> #include <map> #include <se ...

  8. 离散数学考前复习:(三)计数

    离散数学考前复习:(三)计数 3.1排列与组合 加法法则:第一项任务为n1种方式,第二项任务为n2种方式,两项任务不能同时完成,则为(n1+n2)种方式 乘法法则:一个过程可以分为独立的两个相互独立的 ...

  9. 离散数学及其应用课程复习Kenneth H.Rosen

    离散数学及其应用课程笔记 MiracleZero 文章目录 离散数学及其应用课程笔记 chap1 The Foundations: Logic and Proofs chap2 Basic Struc ...

  10. 【离散数学】离散数学系列文章汇总目录(持续更新中)

    本文属于「离散数学」系列文章的汇总目录.这一系列着重于离散数学的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏本文以作备忘.此外,在本系列学习文章中,为了透彻理解离散数学,本人参考了诸多博客 ...

最新文章

  1. ASP.NET Ajax – History Support 續
  2. opencv openpose
  3. char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]
  4. 06 - java 方法
  5. vocabulary of ERP
  6. linux的awk命令如何用?
  7. list 转 json,以及 json 解析
  8. C语言--输入一个数判断是否为素数(多种方法)
  9. 红外通信模块——详细资料(含遥控器按键对应的码值)
  10. 普元EOS7.x及以下版本升级Tomcat8
  11. 如何用保险保障自己的一生?
  12. 数据分析3_淘宝用户行为分析_阿里云天池
  13. linux ppp拨号 USB,Linux中实现ppp拨号连接
  14. siss编程--C语言--三子棋
  15. Cheat Engine游戏脚本修改器通关教程(脑残版Step9)
  16. 手里没有USB转TTL模块调试红外学习模块不要紧,利用最小系统板自己焊接一个
  17. 系统认证风险预测方案总结
  18. opencv编译笔记(opencv 4.1.0 编译失败缺少opencv_world410d.lib)
  19. FI和HR集成自动记账-薪酬计提与发放过账-OBYE/OBYG/PE03/OH02
  20. python分析股票数据 彤_Python数据分析:股票数据

热门文章

  1. linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
  2. cam350 不能打开光绘文件_怎么使用CAM350打开gerber文件
  3. Python回归分析五部曲(三)—一元非线性回归
  4. 数字后端设计相关文件说明
  5. Android手机车牌识别OCR
  6. iScroll实现下拉刷新和上滑加载更多
  7. 事关美亚柏科未来发展!智慧城市建设注入新动力
  8. 49次全国计算机以及靠,第49次全国计算机等级考试(国考)证书领取的通知
  9. C#做一年小孩做一个口算题生成器
  10. win10 打开 chm 文件显示异常的解决办法