组合数学入门
排列组合
排列就是指从给定个数的元素中取出指定个数的元素进行排序;组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。--------OI Wiki
乘法原理和加法原理#
加法原理,就好比一个工作,有
乘法原理,就好比一个工作,有
排列数#
给定
排列的计算公式:
其实就是分子分母同乘一个
其中
全排列就是当
组合数#
区别就是,排列数是要求顺序的,而组合数是从
组合数计算公式:
可以发现只比排列的公式分母多了一个
现在人们习惯用
插板法#
为什么叫插板法呢,因为他是用于解决把一些相同种类的元素分成不同的几组的一种方式,
因为元素是完全相同的,所以我们根据上面的组合数可以得出公式:
本质是求
改一下题目,如果要是允许有空的组呢?
如果这样的话,直接插板是不行的,因为有可能出现一堆板子都插到一个空隙里,这样的话求组合数就是错误的了。
所以我们先借来
可以想象一下,我们是先借了
本质上是求
我们来加一些限制:如果说对于第
和上面一样,本质上就是求
我们浅想一下,设
那么我们知道
二项式定理#
二项式就是由两项组成的式子,比如
主要是用来解决
举一个最常见的例子:初中的完全平方公式
或者高中的完全立方公式
相信你已经发现了他们系数的规律,那就是杨辉三角,其实就是用来解释 ,这个东西很奇妙,我们后面会提到他和组合数的关系。
公式就是
为什么呢,你可以考虑一下,我们在推导完全立方公式的时候,我们是一项一项暴力拆开成
组合数性质#
下面挑几个会的证明一下,不会的先咕了。
证明:
证明:从 或者你可以看看杨辉三角
证明:当
证明:
在
一开始的式子就是这个式子的
证明:其实是
证明:把左边拆开得到:
证明:和性质
证明:
分子与分母同乘
证明:首先对性质
最后就会得到:
其中
其实还有二项式反演啥的但是我咕了。
组合数取模#
有的时候我们题目里面会看到一些要求取模的那种问题。
当然我们都知道取模之后做除法是会出问题的,这个时候我们就需要结合逆元来做。
我们大致可以把这类问题分为三类:
一、
二、
ans=jc[n]*inv[m]*inv[n-m]%P;
三、若
其中最常用的是第二种了,因为题目里一般的取模都是
卢卡斯定理#
如上文所述,卢卡斯定理一般都是用于求解组合数取模。
上文中讲的,当
内容#
对于非负整数
(或许你在其他地方看见的都没有这个乘号,我觉得打出来更清楚)
引理一#
对于组合数
,其中 为质数,满足如下同余式子:
首先我们由组合数的定义式可以知道:
由于
等式两边模
引理二#
对于整数
和素数 ,满足如下同余式:
还记得我们之前的二项式定理吗,我们用它来对左边进行二项式展开,然后用引理一:
在第二步中将中间的多项都利用定理一给抹除了(因为模
第三步中,因为
证明#
对于组合数
将
第四步是用到了二项式定理。
或者:
由于这里
对于左侧
对于右侧,
从而得到卢卡斯定理如下:
还可以表示成:
这样就把问题转化为了递归的问题,只要
可以通过
感谢OI Wiki以及bloodstalk的帮助
作者: 北烛青澜
出处:https://www.cnblogs.com/Multitree/p/17416800.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!