组合数学学习笔记

【CTFhub】——hate_php2021 阅读详情

组合数学学习笔记

——by sunzz3183


组合

定义

n n n 个元素中选 m m m 个元素的所有情况数(无顺序),记为

C n m C_{n}^{m} Cnm

公式

C n m = n ! m ! ( n − m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!} Cnm=m!(nm)!n!

代码

  1. 直接求
inline int ksm(int a,int b){int t=1;for(;b;b>>=1,a=a*a%p)if(b&1)t=t*a%p;return t%p;}
inline int C(int n,int m){
	if(n<m)return 0;
	if(m>n-m)m=n-m;
	int a=1,b=1;
	for(int i=1;i<=m;i++)
		a=a*(n-i+1)%p,b=b*i%p;
	return a*ksm(b,p-2)%p;
}
  1. 预处理阶乘求
int fac[N],inv[N];
inline int ksm(int a,int b){int t=1;for(;b;b>>=1,a=a*a%mod)if(b&1)t=t*a%mod;return t%mod;}
void init(int n){
	fac[0]=inv[0]=1;
	for(int i=1;i<=n;i++)
		fac[i]=fac[i-1]*i%mod;
	inv[n]=ksm(fac[n],mod-2);
	for(int i=n;i>=1;i--)
		inv[i-1]=inv[i]*i%mod;
}
inline int C(int n,int m){
	if(n<m)return 0;
	return fac[n]*inv[m]%mod*inv[n-m]%mod;
}

拓展

因为

C n m = C n n − m C_{n}^m=C_{n}^{n-m} Cnm=Cnnm

所以

C n m = C n − 1 m − 1 + C n − 1 m C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m} Cnm=Cn1m1+Cn1m

万用表

可以找到大部分组合数的规律

QQ截图20230218140945.png

其中第 n n n m m m 列为 C n + m m C_{n+m}^m Cn+mm C n + m n C_{n+m}^n Cn+mn

排列

n n n 个元素中选 m m m 个元素的排列的所有情况数(有顺序),记为

P n m P_{n}^{m} Pnm

公式

P n m = n ! ( n − m ) ! P_{n}^{m}=\frac{n!}{(n-m)!} Pnm=(nm)!n!

Lucas定理

C n m m o d    p = C n / p m / p × C n   m o d   p m   m o d   p m o d    p C_n^m \mod p=C_{n/p}^{m/p} \times C_{n\bmod p}^{m\bmod p}\mod p Cnmmodp=Cn/pm/p×Cnmodpmmodpmodp

代码

inline int Lucas(int n,int m){return m?Lucas(n/p,m/p)*C(n%p,m%p)%p:1;}

卡特兰(Catalan)数

意义

( 0 , 0 ) (0,0) (0,0)越过直线 y = x y=x y=x ,走到 ( n , n ) (n,n) (n,n) 的方案个数。

式子

h ( n ) h(n) h(n) 为卡特兰数的第 n n n 项。

h ( 0 ) = 1 , h ( 1 ) = 1 h(0)=1,h(1)=1 h(0)=1,h(1)=1,卡特兰数满足递推式

h ( n ) = h ( 0 ) × h ( n − 1 ) + h ( 1 ) × h ( n − 2 ) + . . . + h ( n − 1 ) × h ( 0 ) ( n ≥ 2 ) h(n)= h(0)\times h(n-1)+h(1)\times h(n-2) + ... + h(n-1)\times h(0) (n≥2) h(n)=h(0)×h(n1)+h(1)×h(n2)+...+h(n1)×h(0)(n2)

另类递推式:

h ( n ) = h ( n − 1 ) × ( 4 × n − 2 ) / ( n + 1 ) h(n)=h(n-1)\times (4\times n-2)/(n+1) h(n)=h(n1)×(4×n2)/(n+1)

h ( n + 1 ) = h ( n ) × ( 4 × n + 2 ) / ( n + 2 ) h(n+1)=h(n)\times (4\times n + 2) / (n + 2) h(n+1)=h(n)×(4×n+2)/(n+2)

非递推:

h ( n ) = C 2 n n − C 2 n n − 1 = C 2 n n n + 1 = ( 2 n ) ! n ! ( n + 1 ) ! h(n)=C_{2n}^n-C_{2n}^{n-1}=\frac{C_{2n}^n}{n+1}=\frac{(2n)!}{n!(n+1)!} h(n)=C2nnC2nn1=n+1C2nn=n!(n+1)!(2n)!

拓展

在求一些走到 ( n , m ) (n,m) (n,m) 的时候

f ( n , m ) = C n + m n − C n + m m − 1 = C n + m n × ( n − m + 1 ) n + 1 = ( n + m ) ! × ( n − m + 1 ) m ! ( n + 1 ) ! f(n,m)=C_{n+m}^n-C_{n+m}^{m-1}=\frac{C_{n+m}^n\times (n-m+1)}{n+1}=\frac{(n+m)!\times (n-m+1)}{m!(n+1)!} f(n,m)=Cn+mnCn+mm1=n+1Cn+mn×(nm+1)=m!(n+1)!(n+m)!×(nm+1)

多重集组合数

例题Devu and Flowers

描述

给定 n ( 1 ≤ n ≤ 20 ) n(1\leq n \leq 20) n(1n20) 个数,每个数最多选 a i ( 1 ≤ a i ≤ 1 0 12 ) a_i(1\leq a_i \leq 10^{12}) ai(1ai1012),一共选 m ( 1 ≤ m ≤ 1 0 14 ) m(1\leq m \leq 10^{14}) m(1m1014) 个数,问方案数。

分析

显然,当 a i ≥ m a_i\geq m aim 时,答案为

C n + m − 1 n − 1 C_{n+m-1}^{n-1} Cn+m1n1

那么如果不满足这种情况呢?

设第 i i i 个数字为 b i b_i bi,此题可以转化为,从可重集

S = { b 1 ⋅ a 1 , b 2 ⋅ a 2 , ⋯   , b n ⋅ a n } S=\left \{ b_1\cdot a_1,b_2\cdot a_2,\cdots ,b_n\cdot a_n \right \} S={b1a1,b2a2,,bnan}

m m m 个数的方案数。

根据容斥可得:

C n + m − 1 n − 1 − ∑ i = 1 n C n + m − a i − 2 n − 1 + ∑ i = 1 n ∑ j = i + 1 n C n + m − a i − a j − 3 n − 1 − ⋯ + ( − 1 ) n C n + m − ∑ i = 1 n a i − n − 1 n − 1 C_{n+m-1}^{n-1}-\sum\limits_{i=1}^n C_{n+m-a_i-2}^{n-1}+\sum\limits_{i=1}^n \sum\limits_{j=i+1}^n C_{n+m-a_i-a_j-3}^{n-1}-\cdots +(-1)^n C_{n+m-\sum\limits_{i=1}^na_i-n-1}^{n-1} Cn+m1n1i=1nCn+mai2n1+i=1nj=i+1nCn+maiaj3n1+(1)nCn+mi=1nain1n1

实现时通过枚举二进制 0 ∼ 2 n − 1 0\sim 2^n-1 02n1 来加减。

张量/数组存储方式与向量化展开/展平、view、reshape、permute对比 对于一个Tensor来说,我们可以认为它有两种存储方式。 阅读详情

相关推荐

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4007

组合数学【学习笔记(一)】

介绍组合数学基本概念。

大葱的田地🌱 2209

基于扣子3.0复刻MIT“AI股神团队版”:实时股票数据API接入与策略选股复盘系统

基于扣子3.0的AI量化投资系统摘要 本文提出了一种基于扣子(Coze)3.0平台的AI量化投资解决方案,整合实时股票数据与策略选股功能。系统采用三层架构: 数据层:通过AKShare等开源工具获取A股实时行情和历史K线数据,支持批量数据抓取和清洗 策略层:内置多因子选股模型和技术指标分析模块,实现自动化标的筛选 应用层:利用扣子3.0的插件和工作流功能,构建从数据采集到投资建议的完整流程 系统特点包括:完全开源的数据接入方案、Python实现的策略计算模块、以及扣子平台提供的可视化编排能力~~~~~~~~

huanghm88的专栏 195

组合数学》学习笔记

(P28)定理2.4.2:设S是多重集合,它有k种不同类型的对象,且每一种类型的有限重复数分别是n1,n2,...nkn1,n2,...nkn_1,n_2,...n_k。设S的大小为n=n1+n2+...+nkn=n1+n2+...+nkn=n_1+n_2+...+n_k。则S的排列数目等于: x=n!n1!n2!...nk!x=n!n1!n2!...nk! x = \dfrac{n!}{n_1...

qq_34921856的博客 614

基础组合数学学习笔记

一.组合数的定义. 下降幂:我们把从nnn个不同的数中选出mmm个数组成不同序列(考虑顺序)的数量称为nnn的mmm阶下降幂,记为nm‾n^{\underline{m}}nm​,即: nm‾=∏i=1m(n−i+1)=n(n−1)(n−2)⋯(n−m+1)=n!(n−m)! n^{\underline{m}}=\prod_{i=1}^{m}(n-i+1)=n(n-1)(n-2)\cdots(n-m...

hzk_cpp的博客 3532

组合数学学习笔记:狄利克雷原则

什么是组合数学 组合数学(Combinatorial mathematics),又称为离散数学。广义的组合数学就是离散数学,狭义的组合数学是离散数学除图论、代数结构、数理逻辑等的部分。但这只是不同学者在叫法上的区别。总之,组合数学是一门研究离散对象的科学。 组合数学主要内容有组合计数、组合设计、组合矩阵、组合优化等。组合数学是研究“安排”的学科。主要研究以下四类问题。 存在性问题(是否...

薛定谔的猫-前端领域 3268

【文文殿下】组合数学学习笔记

组合数学 容斥原理 \(tot=\sum_{i=1}^{n}(-1)^{i+1}*p(i)\) 排列 全排列公式:\(f(n)=n!\) 有重复元素的排列公式:\(\frac{(\sum p(i))!}{\prod_{i=1}^{n}p(i)!}\) 组合组合数通项公式:\(C_n^k=\frac{n!}{(n-k)!k!}\) 组合数递推公式:\(C_n^k=C_{n-1}^k+C_{n-1...

weixin_33762130的博客 98

组合数学学习笔记(未完待续

算法竞赛考得很多的部分啊 这个还是很重要的 在目前的算法竞赛中有三大计数考点 1)组合计数 2)线性计数 3)群论计数 其中群论计数比较困难,我又不知道什么是线性计数,所以只能颓组合计数。 首先是最简单的东西 加法原理 若完成一件事的方法有nnn类,其中第iii类方法包含aiaiai种不同的方法, 且这些方法互不重合,则完成这件事共有a1+a2+...+ana1+a2+...+ana1+a2+.....

LeoJAM的博客 4713

1-10所有5个数的组合_组合数学学习笔记(七)

在这一章中,我们将会简要介绍容斥原理以及其在计数中的应用。想必大家对于容斥原理这个词语及其含义都已经十分熟悉,故我们将着重于介绍其如何应用以及一些重要的实例。对很多看似无从下手的组合计数问题利用容斥原理往往会变得意想不到的简单。在后文中,我们总是用 表示一种性质,用 表示全集 中满足这种性质的元素组成的集合,用 表示全集 中不满足这种性质的元素组成的集合。定理(容斥原理) 我们以往对于容...

weixin_39721807的博客 1005

组合数学学习笔记(ljt讲课)

排列数(又称下降阶乘幂) nm‾=n(n−1)(n−2)....(n−m+1)=Anmn^{\underline m} = n(n-1)(n-2)....(n-m+1)=A_n^mnm​=n(n−1)(n−2)....(n−m+1)=Anm​ 下降幂的差分 下降幂的差分具有良好的性质 Δnk‾=(n+1)k‾−nk=k∗nk−1‾\Delta n^{\underline k}=(n+1)^{\un...

a1035719430的博客 1575

1-10所有5个数的组合_组合数学学习笔记(四)

在上一章中,我们介绍了普通生成函数。在此基础上,我们说明了普通生成函数的两种应用方式——利用递推公式求通项以及进行多重组合问题的计数。更为细节地,生成函数为我们研究组合问题提供了更多可能性。我们得以利用生成函数相等来证明两个组合问题的计数过程相等。而对于一些复杂的求和式,我们也得以利用生成函数的乘积形式进行拆解。普通生成函数虽然很有用,但是却面临一个问题:它能处理的问题范围有限。不知道读者在上一章...

weixin_35468857的博客 1748

全国教学创新大赛、青教赛、混合式教学设计大赛三大赛资料大全-最新整理分享.zip

一、资源特点全新力作:今年精心打造,人工细细打磨,品质上乘。权威精准:数据来源,准确靠谱,值得信赖。品质无忧:绝无数据造假,品质有保障,放心使用。二、适用人群学生:在校专科生、本科生、研究生,助力学业各个环节。教研人员:大学教师和学术科研工作者,为教学科研添力。三、适用专业社科经济:经济学、社会学专业适用。规划管理:地理学、城市规划,以及商业、工商管理专业皆可使用。

微信聊天记录提取与分析工具

一个用于提取微信聊天记录的工具,支持将聊天记录导出成HTML、Word、CSV文档,以实现永久保存。此外,该工具还具有对聊天记录进行分析的功能,可以生成年度聊天报告,帮助用户更好地了解和回顾与他人的沟通。是一款强大的微信聊天管理工具。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: 莫比乌斯函数及其反演学习笔记
下一篇: 同余问题学习笔记
sunzz3183
博客等级 码龄7年 2粉丝 · 7原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值