组合数与二项式定理
鸽巢原理
n+1 只鸽子飞进 n 个笼子,必定有一个笼子出现 2 只鸽子
将 n 个物体,划分为 k 组,那么至少存在一个分组,含有大于或等于 \(\left \lceil \dfrac{n}{k} \right \rceil\) 个物品
组合数
组合数表示:$ {n \choose k} = C_n^k $
组合数基本公式: $C_n^m = \frac{n!}{m! (n - m)!} = \frac{n (n - 1)···(n - m + 1)}{m!} $
组合数递推公式: \(C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m}\)
求解组合数
- 线性求组合数
范围 $ a \in [1,N - 1], 0 \le b \le a$
记得主函数里调用 pre 函数,记得修改 N 和 mod 的值!
const int N = 1e6 + 10, mod = 998244353;
ll fact[N + 1], finv[N + 1];
ll qpow(ll a, ll x){//带模快速幂
a %= mod;
ll res = 1;
while(x){
if(x & 1) res = res * a % mod;
x >>= 1;
a = a * a % mod;
}
return res;
}
void pre(){//线性预处理
fact[0] = 1;
for(int i = 1; i <= N; ++ i){
fact[i] = fact[i - 1] * i % mod;
}
finv[0] = 1;
finv[N] = qpow(fact[N], mod - 2);
for(int i = N - 1; i > 0; -- i)
finv[i] = finv[i + 1] * (i + 1) % mod;
return ;
}
ll C(int a, int b){//求取组合数
if(a < 0 || b < 0) return 1;
return fact[a] * finv[b] % mod * finv[a - b] % mod;
}
//来自焦佬
暂不建议,因为没有整理过
注意maxm的范围为C(n,m)中,n+m的最大取值。。。
int facinv[maxm + 10], fac[maxm + 10];
ll qpow(int b, int p, int k) {
ll ans = 1, base = b;
while(p) {
if(p & 1) ans = ans * base % k;
p >>= 1;
base = base * base % k;
}
return ans % k;
}
ll C(ll n, ll m) {
if(n < m) return 1;
if(m*2>=n) m=n-m;
return (ll)fac[n] * facinv[m] % mod * facinv[n - m] % mod;
}
facinv[0] = fac[0] = 1;
for(int i = 1; i <= maxm; i++)
fac[i] = (ll)fac[i - 1] * i % mod;
for(int i = 1; i <= maxm; i++){
facinv[i] = facinv[i - 1] * qpow(i, mod - 2, mod)%mod;
}
组合数递推公式 \(C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m}\)
递推预处理组合数
void pre(){
for(int i=1;i<=1000;++i){
c[i][i]=c[i][0]=1;
for(int j=1;j<i;++j){
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
}
return ;
}
相关资料
例题
- 求组合数 2023杭电多校第五场 - 7 12
范德蒙德卷积 - 组合数公式的推导
范德蒙德卷积是一种合并组合数的式子,主要应用于组合数学的公式推导。
范德蒙德卷积公式:$\displaystyle \sum_{i = 0}^{k}{n \choose i}{m \choose k - i} = {n + m \choose k} $
oi wiki :在一个大小为 n+m 的集合中取出 k 个数,可以等于把大小为 n+m 的集合拆成两个集合,大小分别为 n 与 m,然后从 n 中取出 i 个数,从 m 中取出 k-i 个数的方案数。由于我们有了对于 i 的枚举,于是只需要考虑一种拆法,因为不同的拆法之间是等价的。
推论
- 推论 1 :$\displaystyle \sum_{i = -r}^{s}{n \choose r + i}{m \choose s - i} = {n + m \choose r + s} $
- 推论 2 :$\displaystyle \sum_{i = 1}^{n}{n \choose i}{n \choose i - 1} = {2n \choose n - 1} $
- 推论 3 :$\displaystyle \sum_{i = 0}^{n}{n \choose i}^ 2 = \sum_{i = 0}^{n}{n \choose i}{n \choose n - i} = {2n \choose n} $
- 推论 4 :$\displaystyle \sum_{i = 0}^{m}{n \choose i}{m \choose i} = {n + m \choose m} $
相关资料
二项式定理
二项式定理:\((a + b)^n = \displaystyle \sum_{r = 0}^{n}{C_{n}^{r}{a^rb^{n - r}}}\)
二项式系数:$C_{n}^{r} = \frac{n!}{r!(n - r)!} $
例题
- 计算二项式系数 洛谷 P1313 [NOIP2011 提高组] 计算系数
代码传送门