参考资料:
定义
定义 $x$ 和 $y$ 的 Nim 积为 $x\otimes y = \max\{(a\otimes b) \oplus (a\otimes y) \oplus (x\otimes b), 0\le a < x, 0\le b < y\}$
性质
运算性质
$x\otimes 0 = 0\otimes x = 0$
$x\otimes 1 = 1 \otimes x = x$
$x\otimes y = y \otimes x$
$(x\otimes y) \otimes z = x \otimes (y\otimes z)$
- $x\otimes (y\oplus z) = (x\otimes y) \oplus (x\otimes z)$
费马数
定义 Fermat 2-power 为 $2^{2^n}$,其中 $n\in \N$,设其为 $a$。有如下性质:
- $a\otimes x = a\times x (x < a)$
- $a\otimes a = \frac{3}{2} a$
计算
计算过程
设 $g(x,y) = 2^x \otimes 2^y$,$f(x,y) = x\otimes y$。
对于任意的 $x,y$,考虑将它用分配律($x\otimes (y\oplus z) = (x\otimes y) \oplus (x\otimes z)$)拆开,转化成 $f(x,y) = \oplus_{x’\in x, y’\in y} g(x’,y’)$。
下面考虑怎么求 $g(x,y)$。
将 $x,y$ 的二进制位拆出来,转化成费马数相乘:
考虑 $x,y$ 的最高位,设为 $u$:
- $u\in x, u\in y$:设 $M = 2^{2^u}, A = 2^{x-2^u}, B=2^{y-2^u}$,则 $g(x,y) = (\frac{3}{2} M) \otimes A\otimes B$。
- $u\in x,u\notin y$:设 $M=2^{2^u}, A=2^{x-2^u}, B=2^y$,则 $g(x,y) = M \otimes A \otimes B$
$A\otimes B$ 的部分可以往下递归;我们把往下递归的部分展开,发现 $g(x,y)$ 正是:
对于后者,直接调用 $f(x,y)$ 递归计算即可。
复杂度分析
参考 2009 论文《从“k倍动态减法游戏”出发探究一类组合游戏问题》 p25(?)
据说是 $O(\log x \log y)$
习题
划愤 (高维 Nim 积行列式)
hdu3404 Switch lights(二维 Nim 积模板)