组合数的奇偶判定
在之前做过的题目里面,出现了很多关于杨辉三角的题目,很多时候都会联系到组合数的性质看。这里就来说明如何判断组合数的奇偶并证明。
我们知道组合数可以表示为Cnm=m!(n−m)!n!
现在假设n!,m!,(n−m)!的2的因子个数分别为A,B,C。
显然组合数为奇数当且仅当A=B+C。
那a和n!到底有什么关系呢?
其实,对于一个质数p,它在n!的因子个数是
⌊pn⌋+⌊p2n⌋+⌊p3n⌋+⌊p4n⌋+......
因此对于n!来说它2的因子个数(用f(n)表示)就是
f(n)=⌊2n⌋+⌊22n⌋+⌊23n⌋+⌊24n⌋+......
然后对于n来说,它可以表示为$$n=(a_120)+(a_2*21)+(a_32^2)+…$$
知道这个之后我们可以把f(n)的每一项再进一步化简(下面的k为n的二进制位数)
f(n)=y=1∑k⌊2y(a1∗20)+(a2∗21)+...+(ak∗2k−1)⌋
=y=1∑k2y(ay+1∗2y)+...+(ak∗2k−1)
=y=1∑kx=y+1∑k2yax∗2x−1
=x=1∑kaxy=0∑x−22y
=x=1∑kax∗(2x−1−1)
=x=1∑kax∗2x−1−x=1∑kax
=n−x=1∑kax
化简之后我们在观察等式后面的求和发现
n在二进制下1的个数=x=1∑kax
因此n!在二进制下2因子的个数等于n减去其二进制下1的个数。
而组合数为奇数当且仅当A=B+C
而n,m,(n-m)在二进制下1的数目分别为a,b,c
所以
n−a=m−b+(n−m)−c
a=b+c
而要这个条件满足显然当且仅当
n&m==m
Q.E.D.