G i v e n v ∈ { 0 , 1 } n , h o w m a n y s e t s o f m d i s t i n c t v e c t o r s i n { 0 , 1 } n s u c h t h a t v 1 ⊕ v 2 ⊕ . . . ⊕ v m = v ( a d d i t i o n i s b i t w i s e X O R ) . Given \ v \in \{0, 1\}^n , how \ many \ sets \ of \ m \ distinct \ vectors \ in \ \{0, 1\} ^n \ such \ that \ v_1 ⊕ v_2 ⊕ . . . ⊕ v_m = v \ \ (addition \ \ is \ \ bitwise \ \ \ XOR). Given v∈{0,1}n,how many sets of m distinct vectors in {0,1}n such that v1⊕v2⊕...⊕vm=v (addition is bitwise XOR).
我们任意选择 m − 1 m-1 m−1 个向量 v 1 , v 2 , . . . . v m − 1 v_1,v_2,....v_{m-1} v1,v2,....vm−1,一定存在一个向量 v m v_m vm让其异或和为 v v v.但考虑到可能 v m v_m vm和前 m − 1 m-1 m−1个向量的某个向量相同,我们考虑去除这一部分. 因为 v m v_m vm与某个向量相同,即 v m ⊕ v i = 0 v_m \oplus v_i = 0 vm⊕vi=0,我们不妨把这两个向量提出来,剩下的 m − 2 m-2 m−2个向量的异或和依旧为 v v v,即选择 m − 2 m-2 m−2个向量的方案数.可以通过这种方式递推,最后求解.
此外,我们发现 ( m b i t n ) 中 b i t n 很 大 . { m \choose bit_n} 中bit_n很大. \\ (bitnm)中bitn很大. 利用卢卡斯定理 ( m b i t n ) m o d p = ( m m o d p b i t n m o d p ) ⋅ ( ⌊ m p ⌋ ⌊ b i t n p ⌋ ) {m \choose bit_n} mod \ p = {m \ mod \ p \choose bit_n \ mod \ p} \cdot {\lfloor \frac m p\rfloor \choose \lfloor \frac {bit_{n}} {p}\rfloor} (bitnm)mod p=(bitn mod pm mod p)⋅(⌊pbitn⌋⌊pm⌋)
其中 ⌊ m p ⌋ \lfloor \frac m p\rfloor ⌊pm⌋为0,所以该部分为 1,结果等于前部分