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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42557561/article/details/100015380

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 = 2 m n=2^m ,n!中2因子的个数为 n 1 n-1 (即 2 m 1 2^m-1
首先我们知道一个计算n!中2因子个数的方法
a n s = [ n / ( 2 1 ) ] + [ n / ( 2 2 ) ] + [ n / ( 2 3 ) ] + . . . 1 ans=[n/(2^1)]+[n/(2^2)]+[n/(2^3)]+...--(1)
那么由于此时的 n = 2 m n=2^m ,上述式子就是一个等比数列,求和可得 a n s = 2 m 1 ans=2^m-1

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

特别感谢stO ldx&cyk Orz

猜你喜欢

转载自blog.csdn.net/weixin_42557561/article/details/100015380
今日推荐