杨辉三角中某一行的奇数个数

在这里插入图片描述
由高中数学可知,杨辉三角中的数可以用组合数表示。那么,第 n + 1 n+1 n+1行中奇数的个数也可以用数学公式表示: ∑ i = 0 n [ C n i   %   2 = 0 ] \sum_{i=0}^{n}[C_{n}^{i}\ \%\ 2=0] i=0n[Cni % 2=0]

首先给出结论:令 b i t c o u n t ( n ) bitcount(n) bitcount(n) n n n的二进制中1的个数。则有 ∑ i = 0 n [ C n i   %   2 = 0 ] = 2 b i t c o u t ( n ) \sum_{i=0}^{n}[C_{n}^{i}\ \%\ 2=0]\quad=\quad2^{bitcout(n)} i=0n[Cni % 2=0]=2bitcout(n)

  证明:组合数取模,想到卢卡斯定理: C n m m o d    p = ( C n / p m / p × C n m o d    p m m o d    p ) m o d    p C_{n}^{m}\mod p = (C^{m/p}_{n/p} \times C^{m \mod p}_{n \mod p} )\mod p Cnmmodp=(Cn/pm/p×Cnmodpmmodp)modp

但事实上,卢卡斯定理还有另一种等价形式: C n m ≡ ∏ i = 0 k C n i m i ( m o d p ) C_n^m\equiv\prod \limits_{i=0}^k C_{n_i}^{m_i}\pmod p Cnmi=0kCnimi(modp)
其中, m = m k p k + . . . + m 1 p + m 0 , n = n k p k + . . . + n 1 p + n 0 m=m_kp^k+...+m_1p+m_0,n=n_kp^k+...+n_1p+n_0 m=mkpk+...+m1p+m0,n=nkpk+...+n1p+n0 m , n m,n mn p p p进制表示。因此, n i , m i ∈ { 0 , 1 } n_i,m_i\in\{0,1\} ni,mi{0,1}

也就是说,想要 C n m C_n^m Cnm为奇数,那么必须要求 n n n 2 2 2进制为 0 0 0的位置上, m m m 2 2 2进制也为 0 0 0

所以这个组合数只可能是 C 0 0 , C 0 1 , C 1 0 , C 1 1 C_0^0,C_0^1,C_1^0,C_1^1 C00,C01,C10,C11 C 0 0 , C 1 0 , C 1 1 C_0^0,C_1^0,C_1^1 C00,C10,C11其值均为1,但卢卡斯定理规定 C 0 1 C_0^1 C01这样不合法的组合数值为 0 0 0

那么,考虑从 0 0 0 n n n,满足这个条件的 i i i的个数:
假设 n n n的二进制表示有 k k k位,那么在为 1 1 1的位上, i i i在这一位的取值有 0 0 0 1 1 1,为 0 0 0的位上, i i i的取值只能是 0 0 0。比如 9 ( 1001 ) 9(1001) 9(1001) i i i在最左和最右边的两位都可以取 0 0 0 1 1 1,但是中间两位只能取 0 0 0。那么,如果令 b i t c o u n t ( n ) bitcount(n) bitcount(n) n n n的二进制中1的个数。则有 ∑ i = 0 n [ C n i   %   2 = 0 ] = 2 b i t c o u t ( n ) \sum_{i=0}^{n}[C_{n}^{i}\ \%\ 2=0]\quad=\quad2^{bitcout(n)} i=0n[Cni % 2=0]=2bitcout(n)

证毕

顺便,由上文提到的**想要 C n m C_n^m Cnm为奇数,那么必须要求 n n n 2 2 2进制为 0 0 0的位置上, m m m 2 2 2进制也为 0 0 0。**立刻可得一种 O ( 1 ) O(1) O(1)判断组合数奇偶的方法:

  • n & m = m n\&m=m n&m=m,则 C n m C_n^m Cnm为奇数。否则, C n m C_n^m Cnm为偶数
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值