由高中数学可知,杨辉三角中的数可以用组合数表示。那么,第
n
+
1
n+1
n+1行中奇数的个数也可以用数学公式表示:
∑
i
=
0
n
[
C
n
i
%
2
=
0
]
\sum_{i=0}^{n}[C_{n}^{i}\ \%\ 2=0]
i=0∑n[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=0∑n[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
Cnm≡i=0∏kCnimi(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
m,n的
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=0∑n[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为偶数