组合数奇偶性的判断(附证明)

Learning

方法一:

计算一下,然后看它的奇偶性;但是这个时间以及数据范围上都不允许;


方法二

对于给定C(n,m),检查n!中2因子的个数与m!和(n-m)!中2因子个数和的关系,假设n!中2因子个数为a,m!中2因子个数为b,(n-m)!中2因子个数为c,则显然有a>=(b+c);并且当a==b+c时,一定为奇,否则为偶。


方法三

由方法2可以很容易(稍后给出证明)地看出,n!中含有2因子的个数等于(n-它的二进制形式中1的个数)(每除一次如果有1的话去掉一个1)。那么题意再次转化为求m,n-m以及n的二进制形式中1的个数。或者说,看n&m ?= m,这个呢,如果等于,那么也就意味着,所有m中为1的位置n一定为1,那么n-m就可以直接用二进制减,这样得到的差的二进制中1的个数加上m中二进制1的位数正好等于n中1的位数,由前面可以知道,这就是一个奇数。

【关于方法三的证明】
先证明,若n=2mn=2^m,n!中2因子的个数为n1n-1(即2m12^m-1
首先我们知道一个计算n!中2因子个数的方法
ans=[n/(21)]+[n/(22)]+[n/(23)]+...1ans=[n/(2^1)]+[n/(2^2)]+[n/(2^3)]+...--(1)
那么由于此时的n=2mn=2^m,上述式子就是一个等比数列,求和可得ans=2m1ans=2^m-1

推广到更普遍的情况n!=2mn!=2^m
那么我们肯定可以将n拆做:n=2x1+2x2+2x3+.....+2xm2n=2^{x1}+2^{x2}+2^{x3}+.....+2^{xm}--(2)
将(2)代入(1)中,再次由等比数列求和,可得ans=(2x11)+(2x21)+(2x31)+....+(2xm1)ans=(2^{x1}-1)+(2^{x2}-1)+(2^{x3}-1)+....+(2^{xm}-1)
然后打开括号~
完事儿

特别感谢stO ldx&cyk Orz

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章