组合数奇偶判断

【用杨辉三角阐释Lucas定理】https://www.bilibili.com/video/BV14F411P7ES?vd_source=67186f29c3efb728bcff34035cf5aba2

这个视频可以简单的领会一下精神,卢卡斯定理也就是用于组合数取模。

  • 奇偶性通过对2取模来判断。

为什么提到“奇偶”“对2取摸”“杨辉三角”“卢卡斯定理”?

这就要引入一道题:
Problem - F - Codeforces

榜单清一色的
cout<<(((n-1)&i)==i?k:0)<<’ ';

实在捉摸不透,因而来解释一番

题意

求三角形第n行的数据。

三角形定义如下:

  • 在i行有i个整数
  • 第一行中的单个整数是 k k k 。(k的值无关紧要,只考虑01)

T i , j = { T i − 1 , j − 1 ⊕ T i − 1 , j , if  1 < j < i T i − 1 , j , if  j = 1 T i − 1 , j − 1 , if  j = i T_{i,j} = \begin{cases} T_{i-1,j-1} \oplus T_{i-1,j}, &\textrm{if } 1 < j < i \\ T_{i-1,j}, &\textrm{if } j = 1 \\ T_{i-1,j-1}, &\textrm{if } j = i \end{cases} Ti,j= Ti1,j1Ti1,j,Ti1,j,Ti1,j1,if 1<j<iif j=1if j=i

思路

  1. 异或某种意义上来讲,是不进位的二进制加法

​ 根据三角形定义,易知:此三角形正是杨辉三角对2取模

  1. 由于杨辉三角和二项式、组合数的关系。只需求 C n − 1 i C_{n-1}^{i} Cn1i%2, 0为0,1为k

  2. 卢卡斯定理用于p(质数)较小的组合数取模

    根据Lucas定理,对于质数p(在这里p=2),组合数C(n, m)模p可以表示为一下两种形式(本文主要围绕第二种):
    C n m = C n p m p ⋅ C n % p m % p % p C_{n}^{m}=C_\frac{n}{p}^\frac{m}{p}\cdot C_{{n\%p}}^{m\%p} \%p Cnm=CpnpmCn%pm%p%p

C ( n , m ) ≡ ∏ i = 0 r C ( n i , m i ) ( m o d p ) C(n, m) \equiv \prod_{i=0}^{r} C(n_i, m_i) \pmod{p} C(n,m)i=0rC(ni,mi)(modp)

其中,n和m分别表示为p进制数(在这里是二进制),即 n = ∑ i = 0 r n i ⋅ 2 i 和 m = ∑ i = 0 r m i ⋅ 2 i n = \sum_{i=0}^{r} n_i \cdot 2^i 和 m = \sum_{i=0}^{r} m_i \cdot 2^i n=i=0rni2im=i=0rmi2i

总结: C ( n , m ) ( m o d 2 ) C(n, m)\pmod{2} C(n,m)(mod2)等于n的二进制表示中每个位上的数字与m的二进制表示中对应位上的数字进行“与”操作的结果的乘积。

  • 由于我们考虑的是模2的情况,组合数 C ( n i , m i ) C(n_i, m_i) C(ni,mi)模2只有两种结果:0或1。而 C ( n i , m i ) C(n_i, m_i) C(ni,mi)模2为1当且仅当 n i > = m i n_i >= m_i ni>=mi

即, C 0 0 和 C 1 1 和 C 1 0 C_{0}^{0}和C_{1}^{1}和C_{1}^{0} C00C11C10=1, C 0 1 C_{0}^{1} C01为0

  • 因此,C(n, m)模2为1当且仅当n和m的二进制表示中对应的每一位都满足 n i > = m i n_i >= m_i ni>=mi,这等价于 n i 和 m i n_i和m_i nimi的“与”操作结果为 m i m_i mi

综上

(n-1)&i==i 表示组合数 C n − 1 i C_{n-1}^{i} Cn1i为奇数,反之,为偶数
若想了解公式一求解组合数,请转:
求组合数(递推法、乘法逆元、卢卡斯定理、分解质因数)_分解质因数求组合数-CSDN博客

Logo

集算法之大成!助力oier实现梦想!

更多推荐