maththeorem
WZH 二项式定理的研究
杨辉三角
我国南宋数学家杨辉使用了如下三角形解释二项式展开的规律:

在这个三角形中,第 i 行有 i 个数。第 1 行的数字为 1 ,第 i(i=1) 行的第 j(1<j<i) 个数字为其上方两个数字之和,即,第 i−1 行第 j 个数字和第 i−1 行第 j−1 个数字之和。第 i 行第一个数字和最后一个数字为 1 。
杨辉认为,这个三角形中第 i 行第 j 个数字为 (a+b)i−1 中 aj−1bi−j 的系数。
二项式展开
二项式是形如 (a+b)n 的式子。这类式子可以使用多项式乘法将其展开成几个只与 a,b 有关的式子。
比如, a+b=a+b , (a+b)2=(a+b)(a+b)=a2+2ab+b2 。
一般的,我们可以将二项式展开为如下形式:
i∑j∑ci,jaibj
其中 ci,j 为未知实数。
二项式定理
二项式定理内容
二项式定理的基本内容如下:
(a+b)n=i=0∑nCniaibn−i
其中 Cni 为组合数,即 (ni) 。
证明
设二项式形式为 (a+b)n=i=1∏n(a+b)
根据多项式乘法的规律,二项式展开后不化简的每一项均为每一个单独的多项式中的一项的乘积。
而二项式中的每一项均为 (a+b) ,设不化简的其中一项共选择了 w(0≤w≤n) 个多项式中的项 a ,则该项的值为 awbn−w 。
所以, (a+b)n=i=0∑nciaibn−i ,其中 ci 为未知实数。
回顾我们刚才的过程,我们发现对于某一个 x(0≤x≤n) , axbn−x 是在 n 个多项式中,选择了 x 次 a 所得到的项。而在 n 个多项式中,如果把选 a 当作取走这个数,不选 a 当作不取这个数,则在 2n 种选择中,共有 Cnx 中选择方法,即,在二项式 (a+b)n 中,共有 Cnx 个项为 axbn−x 。所以, axbn−x 的系数为 Cnx 。
综上, (a+b)n 的展开式为:
i=0∑nCniaibn−i
二项式定理与杨辉三角
由上述内容可知,杨辉的解释等价于杨辉三角中第 i 行第 j 个数字为 Ci−1j−1 。
由杨辉三角的性质,这同时等价于如下命题:
Cnk=Cn−1k−1+Cn−1k,Cn0=Cnn=1
其中 n≥1,0<k<n 。
这里面第二条是显然的,由组合数定义可知,从 n 个不同的数里一个都不选的方案数显然是 1 ,选 n 个的方案数也只能是 1 。
而第一条,我们仍可以使用二项式定理证明。
注意到 (a+b)n=∑i=0nCniaibn−i ,
同时, (a+b)n=(a+b)n−1×(a+b)=(i=0∑n−1Cn−1iaibn−i−1)×(a+b) 。
所以 i=0∑nCniaibn−i=(i=0∑n−1Cn−1iaibn−i−1)×(a+b) 。
设 p 为 (a+b)n 中 akbn−k 的系数 Cnk , q 为(a+b)n−1 中 akbn−k−1 的系数 Cn−1k , r 为 (a+b)n−1 中 ak−1sbn−k 的系数 Cn−1k−1 。
由多项式乘法得, (a+b)n=(a+b)n−1×(a+b) 中的不化简的系数是由 (a+b)n−1 中选择一项,与 (a+b) 中的一项相乘得到的。
所以 (a+b)n 中项 p×akbn−k 应该为 (a+b)n−1 中项 q×akbn−k−1 乘上 b 加上 (a+b)n−1 中项 r×ak−1bn−k 乘上 a 得到。
换句话说, p×akbn−k=q×akbn−k−1×b+r×ak−1bn−k×a ,
也就是 p×akbn−k=q×akbn−k+r×akbn−k ,
所以, p=q+r ,即:
Cnk=Cn−1k−1+Cn−1k
于是以上两个命题均得证,杨辉的解释是正确的,杨辉三角的各种性质也都可以由组合数解释。
二项式定理与普通型生成函数
二项式定理与组合数的关系
如果定义当 k>n 时, Cnk=0 ,那么二项式定理又可以写作如下形式:
(a+b)n=i=0∑∞Cniaibn−i
再令 a=x , b=1 ,则有:
(1+x)n=i=0∑∞Cnixi
这正是普通型生成函数的形式。也就是说, (1+x)n 是 Cni 的普通型生成函数。
二项式定理的用途
求组合数
我们可以利用生成函数得到一种可以绕开 Lucas 定理求组合数的方法:
- 选定三个模数 p1,p2,p3 ,一般选择 223×119+1 , 221×479+1 和 226×7+1 。
- 对于所有需要的单位根为 ω ,计算 (1+ω)n 分别模 p1,p2,p3 的值。
- 得到后使用逆 NTT 算三次,分别对应三个模数。
- 使用 CRT 对答案进行合并。
这样就可以 O(nlogn) 的计算组合数了。
对比 Lucas 定理,这种方法适合模数较大时(一般至少有 109 量级)的快速计算。
关于一些组合数公式的推导
我们可以利用生成函数完成一些组合数公式的推导。
例如如下公式:
i=0∑n(ni)2=(2nn)
证明:
对于两个多项式 A(x),B(x) ,若 A(x)=i=0∑naixi , B(x)=i=0∑nbixi , A(x)×B(x)=i=0∑2ncixi ,则对于任意 0≤k≤2n ,有:
ck=i=0∑kaibk−i
设 A(x)=(1+x)n , B(x)=(1+x)n ,则有 A(x)×B(x)=(1+x)2n , cn=i=0∑n(ni)(nn−i) 。
由于 (ni)=(nn−i) ,所以有 cn=i=0∑n(ni)2 。
同时,由二项式定理得 (1+x)2n=i=0∑2n(2ni)xi ,也就是说 ci=(2ni) ,那么 cn=(2nn) ,代入上式,得:
cn=i=0∑n(ni)2=(2nn)
公式得证。
再比如下面的公式:
i=0∑n(ni)(m+in)=i=0∑n(ni)(mi)2i
证明:
我们有一个组合数公式:
(m+in)=j=0∑n(ij)(mn−j)
原理也好理解,从 m+i 个数中选 n 个等价于对于每一个 0≤j≤n ,从 i 个数中选 j 个,从另外 m 个数中选 n−j 个。
那么, i=0∑n(ni)(m+in)=i=0∑n(ni)j=0∑n(ij)(mn−j) ,交换求和顺序,可以得到:
j=0∑n(mn−j)i=0∑n(ij)(ni)
我们注意到 (ij)(nj)=(nj)(n−ji−j) ,因为左式利用组合数基本公式 (ij)=j!(i−j)!i! 可以得到 j!(i−j)!(n−i)!n! ,而右式也可以得到这个结果。
那么原式又可以利用这个式子变换成如下形式:
j=0∑n(mn−j)(nj)i=0∑n(n−ji−j)
观察 i 的求和式中,设 N=n−j,I=i−j ,那么求和式变为 I=0∑N(NI) 。
设 A(x)=I=0∑N(Ni)xI ,利用二项式定理知 A(x)=(1+x)N 。代入 x=1 ,得 A(1)=(1+1)N=2N=I=0∑N(Ni) 。
将这一结果代入原式,得到如下式子:
j=0∑n(mn−j)(nj)2n−j
又由组合数基本公式 (ni)=(nn−i) ,我们可将原式变换成 j=0∑n(mn−j)(nn−j)2n−j 。
设 k=n−j ,使用 k 代换原式中的变量 j ,得到如下式子:
k=0∑n(mk)(nk)2k
这恰是我们要证明的东西,于是公式得证。
参考资料
- 必应图片, https://pic2.zhimg.com/v2-49147aa82c0a2340643d7fa988f5fc5d_r.jpg 。