Matrix Permanent modulo 2^k
求矩阵的积和式 \(\bmod 2^k\) 的值。
(防剧透)
解法
考虑矩阵是随机的情况。
考虑容斥计算积和式的方法(Ryser's formula),式子为:
\[\sum_{S\subseteq \{1,2,...,n\}} (-1)^{n-|S|}F(S),F(S)=\prod_{i=1}^{n}(\sum_{j\in S} A_{i,j})
\]
考虑一个 \(F(S)\) 何时不会为 \(0\):
设 \(c_i = \sum_{j\in S} A_{i,j}\)。当 \(c_i=0\) 的个数 \(<k\) 的时候 \(F(S)\) 才可能不为 \(0\)。
于是合法的 \(c\) 数组只有 \(\sum_{i=0}^{k-1}\binom{n}{i}\) 个。
枚举每种 \(c\) 数组,每次 \(O(n^3/w)\) 解方程解出集合 \(S\),可能无解或者有多组解。
当方程所有系数随机的时候,一组方程期望有 \(1\) 个解,总共 \(O(cnt)\) 个,直接每个解暴力算。
当 \(k=2\) (mod 4) 的时候,只有 \(n+1\) 组方程要解,看似是 \(O(n^4/w)\) 的,但可以用带修改线性基做到 \(O(n^3/w)\)。
如果矩阵不随机呢?可以加一行一列,令 \(a_{n+1,n+1}=1,a_{n+1,[0...n]}=Rand,a_{[0...n],n+1}=0\),容易发现答案不变,并且做到了随机的效果。