组合数的奇偶判定

在之前做过的题目里面,出现了很多关于杨辉三角的题目,很多时候都会联系到组合数的性质看。这里就来说明如何判断组合数的奇偶并证明。
我们知道组合数可以表示为Cnm=n!m!(nm)!C_n^m=\frac{n!}{m!(n-m)!}
现在假设n!,m!,(nm)!2的因子个数分别为A,B,Cn!,m!,(n-m)!的2的因子个数分别为A,B,C
显然组合数为奇数当且仅当A=B+C。
那a和n!到底有什么关系呢?
其实,对于一个质数p,它在n!的因子个数是

np+np2+np3+np4+......\lfloor\frac{n}{p}\rfloor+\lfloor\frac{n}{p^2}\rfloor+\lfloor\frac{n}{p^3}\rfloor+\lfloor\frac{n}{p^4}\rfloor+......

因此对于n!n!来说它2的因子个数(用f(n)f(n)表示)就是

f(n)=n2+n22+n23+n24+......f(n)=\lfloor\frac{n}{2}\rfloor+\lfloor\frac{n}{2^{2}}\rfloor+\lfloor\frac{n}{2^3}\rfloor+\lfloor\frac{n}{2^4}\rfloor+......

然后对于n来说,它可以表示为$$n=(a_120)+(a_2*21)+(a_32^2)+…$$
知道这个之后我们可以把f(n)f(n)的每一项再进一步化简(下面的kk为n的二进制位数)

f(n)=y=1k(a120)+(a221)+...+(ak2k1)2yf(n)=\sum_{y=1}^k\lfloor\frac{(a_1*2^0)+(a_2*2^1)+...+(a_k*2^{k-1})}{2^y}\rfloor

=y=1k(ay+12y)+...+(ak2k1)2y=\sum_{y=1}^k\frac{(a_{y+1}*2^{y})+...+(a_k*2^{k-1})}{2^y}

=y=1kx=y+1kax2x12y=\sum_{y=1}^k\sum_{x=y+1}^k\frac{a_x*2^{x-1}}{2^y}

=x=1kaxy=0x22y=\sum_{x=1}^ka_x\sum_{y=0}^{x-2}{2^y}

=x=1kax(2x11)=\sum_{x=1}^ka_x*(2^{x-1}-1)

=x=1kax2x1x=1kax=\sum_{x=1}^k{a_x*2^{x-1}}-\sum_{x=1}^k{a_x}

=nx=1kax=n-\sum_{x=1}^k{a_x}

化简之后我们在观察等式后面的求和发现

n在二进制下1的个数=x=1kaxn在二进制下1的个数=\sum_{x=1}^k{a_x}

因此n!n!在二进制下2因子的个数等于n减去其二进制下1的个数。
而组合数为奇数当且仅当A=B+C
而n,m,(n-m)在二进制下1的数目分别为a,b,c
所以

na=mb+(nm)cn-a=m-b+(n-m)-c

a=b+ca=b+c

而要这个条件满足显然当且仅当

n&m==mn\&m==m

Q.E.D.