二项式定理

二项式定理

内容

二项式定理阐明了一个展开式的系数:
( x + y ) n = ∑ i = 0 n ( i n ) x i y n − i (x+y)^n=\sum_{i=0}^n\left(^n_i\right)x^iy^{n-i} (x+y)n=i=0∑n(in)xiyn−i

证明:

( x + y ) n = ( x + y ) ( x + y ) ⋯ ( x + y ) (x+y)^n=(x+y)(x+y)\cdots(x+y) (x+y)n=(x+y)(x+y)⋯(x+y)

暴力拆开看一下,应该是每个 ( x + y ) (x+y) (x+y),都取出一个 x x x 或者 y y y,去跟后面所有的 ( x + y ) (x+y) (x+y) 中再取一个数字,乘起来,相加。

所以展开后的每一项都是 n n n 次项。

而注意到先选 i i i 个 x x x,后选 n − i n-i n−i 个 y y y 与先选 n − i n-i n−i 个 y y y,后选 i i i 个 x x x 乘起来其实是一样的,即我们关心的只是 x i y n − i x^iy^{n-i} xiyn−i 中的 i i i 以及有多少个 x i y n − i x^iy^{n-i} xiyn−i。

从组合数学的方向考虑,假设我们选择了 i i i 个 x x x,那么就需要选择 ( n − i ) (n-i) (n−i) 个 y y y。

而方案数就是 ( i n ) = ( n − i n ) \left(^n_i\right)=\left(^n_{n-i}\right) (in)=(n−in)。

即从 n n n 个 ( x + y ) (x+y) (x+y) 中,选 i i i 个 x x x 或选 n − i n-i n−i 个 y y y 的方案数,但本质上是等价的。

所以对于一共选了 i i i 个 x x x, n − i n-i n−i 个 y y y,贡献就是 ( i n ) x i y n − i \left(^n_i\right)x^iy^{n-i} (in)xiyn−i。

对于完全展开后的式子,就是把所有上述式子相加,即 ∑ i = 0 n ( i n ) x i y n − i \sum_{i=0}^n\left(^n_i\right)x^iy^{n-i} ∑i=0n(in)xiyn−i。

一些推论

感觉只要会了普通版本,这些东西十分简单,就是特殊情况。

  • ( x + 1 ) n = ∑ i = 0 n ( i n ) x i (x+1)^n=\sum_{i=0}^n\left(^n_i\right)x^i (x+1)n=∑i=0n(in)xi

令 y = 1 y=1 y=1 即可,不解释。

  • ∑ i = 0 n ( i n ) = 2 n \sum_{i=0}^n\left(^n_i\right)=2^n ∑i=0n(in)=2n

这个可以当作是在 n n n 个数中选子集,每个数都有选和不选两种状态,所以一共是 2 n 2^n 2n 种。

  • ∑ i = 0 n ( − 1 ) i ( i n ) = 0 \sum_{i=0}^n(-1)^i\left(^n_i\right)=0 ∑i=0n(−1)i(in)=0

令 x = − 1 , y = 1 x=-1,y=1 x=−1,y=1 即可。

多项式定理

直接上式子:
( x 1 + x 2 + ⋯ x k ) n = ∑ ( ∑ l = 1 k n l ) = n ∏ i = 1 k ( n i n − ∑ j = 1 i − 1 n j ) x i n i (x_1+x_2+\cdots x_k)^n=\sum_{\left(\sum_{l=1}^kn_l\right)=n}\prod_{i=1}^k\left(^{n-\sum_{j=1}^{i-1}n_j}_{n_i}\right)x_i^{n_i} (x1+x2+⋯xk)n=(∑l=1knl)=n∑i=1∏k(nin−∑j=1i−1nj)xini

即考虑 x i x_i xi 选择 n i n_i ni 个的方案数。

与二项式定理同理,所有项的系数必须是 n n n。
( n i n − ∑ j = 1 i − 1 n j ) \left(^{n-\sum_{j=1}^{i-1}n_j}_{n_i}\right) (nin−∑j=1i−1nj)

这一坨的意思是,当前考虑到第 i i i 个, n n n 个中已经被选了 ∑ j = 1 i − 1 n j \sum_{j=1}^{i-1}n_j ∑j=1i−1nj 个,需要选 n i n_i ni 个 x i x_i xi 的方案数。

给点例题

NOIP2011提高组 计算系数

题意:给定多项式 ( a x + b y ) k (ax+by)^k (ax+by)k,求展开后 x n y m x^ny^m xnym 的系数。

本来是很复杂的,但是学完二项式定理就很简单了,推式子:
( a x + b y ) k = ∑ i = 0 k ( i k ) ( a x ) i ( b y ) n − i (ax+by)^k\\ =\sum_{i=0}^k\left(^k_i\right)(ax)^i(by)^{n-i} (ax+by)k=i=0∑k(ik)(ax)i(by)n−i

其中要我们求的就是 ( n k ) ( a x ) i ( b y ) n − i \left(^k_n\right)(ax)^i(by)^{n-i} (nk)(ax)i(by)n−i。

移出系数就是: ( n k ) a i b n − i \left(^k_n\right)a^ib^{n-i} (nk)aibn−i。

用快速幂搞搞即可。

注意排列数记得用递推式: C i , j = C i − 1 , j + C i − 1 , j − 1 C_{i,j}=C_{i-1,j}+C_{i-1,j-1} Ci,j=Ci−1,j+Ci−1,j−1。其中 C i , j C_{i,j} Ci,j 表示从 i i i 个物品中,无序地选取 j j j 个的方案数。

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ljl;
#define FUP(i,x,y) for(int i=(x);i<=(y);++i)
#define FDW(i,x,y) for(int i=(x);i>=(y);--i)
inline void Rd(auto &num);
const int K=1e3+5,N=K,M=K;
const ljl Mod=10007;
ljl a,b,k,n,m,fct[N],C[N][N];
ljl qpow(ljl a,ljl k)//a^k
{
	ljl ans=1ll;
	while(k)
	{
		if(k&1)ans=ans%Mod*a%Mod;
		a=a%Mod*a%Mod;
		k>>=1;
	}
	return ans;
}
void getc()
{
	//c[a][b]:choose b in a
	FUP(i,1,k)
		C[i][0]=C[0][i]=1;
	FUP(i,1,k)
		FUP(j,1,i)
			C[i][j]=(C[i-1][j-1]+C[i-1][j])%Mod;
//	FUP(i,1,k)
//	{
//		FUP(j,1,k)
//		{
//			printf("%lld ",C[i][j]);
//		}
//		printf("\n");
//	}
	return ;
}
int main(){
	Rd(a);Rd(b);Rd(k);Rd(n);Rd(m);
	fct[1]=1;
	FUP(i,2,k)
		fct[i]=fct[i-1]*i%Mod;
	getc();
	printf("%lld\n",C[k][n]%Mod*qpow(a,n)%Mod*qpow(b,m)%Mod);
	return 0;
}
inline void Rd(auto &num)
{
	num=0;char ch=getchar();bool f=0;
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		num=(num<<1)+(num<<3)+(ch-'0');
		ch=getchar();
	}
	if(f)num=-num;
	return;
}
相关推荐
菜鸟‍1 小时前
【论文学习】SAMed-2: 选择性记忆增强的医学任意分割模型
人工智能·学习·算法
Mcband1 小时前
【Spring Boot】Interceptor的原理、配置、顺序控制及与Filter的关键区别
java·spring boot·后端
业精于勤的牙1 小时前
模拟退火算法
算法·机器学习·模拟退火算法
qq_479875431 小时前
std::true_type {}
java·linux·服务器
罗湖老棍子1 小时前
【例9.10】机器分配(信息学奥赛一本通- P1266) 机器分配(洛谷P2066)
算法·动态规划·多重背包
qq_348231851 小时前
Spring Boot 体系核心全解
java·spring boot·后端
好评1241 小时前
C/C++ 内存管理:摆脱野指针和内存泄漏
开发语言·c++·内存管理·c/c++
byx20001 小时前
Relation Explorer:一个强大的隐函数绘图软件
数学建模·matlab