[学习笔记]组合数取模的几种求法

本文介绍了组合数 (mn) mod p 的不同计算方法,涉及递推、通项公式、Lucas 定理和中国剩余定理等,适用于不同的 n, m, p 值范围,特别关注了质数情况和非质数 p 的处理策略。" 122926333,10666513,Dijkstra算法解决单源最短路问题,"['算法', '图论', 'c++']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引入

给定 nnnmmmppp ,求:
(nm) mod p\binom nm\bmod p(mn)modp
其中 (nm)\binom nm(mn) 为组合数,表示 nnn 个元素中选出 mmm 个的方案数。
即:
(nm)=n!m!×(n−m)!\binom nm=\frac{n!}{m!\times(n-m)!}(mn)=m!×(nm)!n!
特殊地,我们规定 (n0)=1\binom n0=1(0n)=1 且当 n&lt;mn&lt;mn<m(nm)=0\binom nm=0(mn)=0

二、 n,m≤3,000n,m\le 3,000n,m3,000

(nm)=(n−1m)+(n−1m−1)\binom nm=\binom {n-1}m+\binom{n-1}{m-1}(mn)=(mn1)+(m1n1)
(1)组合意义:
考察 nnn 个元素中的最后一个元素是否被选出。
如果没有被选出,那么前面的 n−1n-1n1 个元素必须选出 mmm 个,即 (n−1m)\binom {n-1}m(mn1)
如果被选出,那么前面的 n−1n-1n1 个元素必须选出 m−1m-1m1 个,即 (n−1m−1)\binom {n-1}{m-1}(m1n1)
(2)数学推导:
(n−1m)+(n−1m−1)=(n−1)!m!×(n−1−m)!+(n−1)!(m−1)!×(n−m)!\binom{n-1}m+\binom{n-1}{m-1}=\frac{(n-1)!}{m!\times(n-1-m)!}+\frac{(n-1)!}{(m-1)!\times(n-m)!}(mn1)+(m1n1)=m!×(n1m)!(n1)!+(m1)!×(nm)!(n1)!
=(n−1)!×(n−m)+(n−1)!×mm!×(n−m)!=n!m!×(n−m)!=(nm)=\frac{(n-1)!\times(n-m)+(n-1)!\times m}{m!\times(n-m)!}=\frac{n!}{m!\times(n-m)!}=\binom nm=m!×(nm)!(n1)!×(nm)+(n1)!×m=m!×(nm)!n!=(mn)
(3)生成函数:
根据二项式定理 (a+b)n=∑i=0n(ni)aibn−i(a+b)^n=\sum_{i=0}^n\binom nia^ib^{n-i}(a+b)n=i=0n(in)aibni ,数列
(n0),(n1),(n2),...,(nn)\binom n0,\binom n1,\binom n2,...,\binom nn(0n),(1n),(2n),...,(nn)
的生成函数为 (1+x)n(1+x)^n(1+x)n
于是 (nm)\binom nm(mn) 就是 (1+x)n(1+x)^n(1+x)nmmm 次项。
(F(x))k(F(x))_k(F(x))k 表示多项式 F(x)F(x)F(x)kkk 次项。
则:
(n−1m)+(n−1m−1)=((1+x)n−1)m+((1+x)n−1)m−1\binom{n-1}m+\binom{n-1}{m-1}=((1+x)^{n-1})_m+((1+x)^{n-1})_{m-1}(mn1)+(m1

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值