古代的
Nim
\operatorname{Nim}
Nim取石子游戏是由两个人面对若干堆石子进行的游戏。
设有
n
≥
2
n\ge 2
n≥2堆石子,各堆分别含有
A
1
、
A
2
⋯
A
n
A_1、A_2\cdots A_n
A1、A2⋯An个石子。
游戏的目的就是选取最后剩下的石子。游戏规则如下:
- 游戏人交替进行游戏
- 当轮到每个游戏人取子时,选择这些石子中的一堆,并从所选的堆中取走至少一个石子
(游戏人也可以取走他所选择的堆中的全部石子,于是留下一个空堆)
当所有的堆都变成空堆时,游戏结束。
最后取子(即能够取走最后一堆中剩下的所有石子)的游戏人,视为游戏的胜利者。
这种游戏称为 NIM \operatorname{NIM} NIM游戏。
对于这种游戏,只有先手必胜和先手必败两种情况。
定理:
NIM \operatorname{NIM} NIM先手必胜,当且仅当 A 1 xor A 2 xor A 3 xor ⋯ xor A n A_1\operatorname{xor}A_2\operatorname{xor}A_3\operatorname{xor}\cdots\operatorname{xor}A_n A1xorA2xorA3xor⋯xorAn不等于 0 0 0
证明:
- 所有物品都被取光是一个必败局面(对手取走最后一件物品,对手已经获得胜利),此时显然有 A 1 xor A 2 xor A 3 xor ⋯ xor A n = 0 A_1\operatorname{xor}A_2\operatorname{xor}A_3\operatorname{xor}\cdots\operatorname{xor}A_n=0 A1xorA2xorA3xor⋯xorAn=0。
- 对于任意一个局面,如果 A 1 xor A 2 xor A 3 xor ⋯ xor A n = x A_1\operatorname{xor}A_2\operatorname{xor}A_3\operatorname{xor}\cdots\operatorname{xor}A_n=x A1xorA2xorA3xor⋯xorAn=x不等于 0 0 0,如果x二进制表示下最高位的1在第k位,那么至少存在一个石子 A i A_i Ai,它的第 k k k位为1。显然 A i xor x < A i A_i\operatorname{xor}x<A_i Aixorx<Ai时,我们就能从 A i A_i Ai堆中取走若干柿子,使其变成 A i xor x A_i\operatorname{xor}x Aixorx,从而得到了一个各堆石子数异或起来等于 0 0 0的局面。
- 对面任意一个局面,如果 A 1 xor A 2 xor A 3 xor ⋯ xor A n = 0 A_1\operatorname{xor}A_2\operatorname{xor}A_3\operatorname{xor}\cdots\operatorname{xor}A_n=0 A1xorA2xorA3xor⋯xorAn=0,那么无论如何取柿子,得到的局面下各堆石子异或起来都不等于 0 0 0。用反证法可以证明,假设 A i A_i Ai被取成了 A i xor x A_i\operatorname{xor}x Aixorx,由于 x = 0 x=0 x=0,所以不满足从所选的堆中取走至少一个石子。
- 综上所述, NIM \operatorname{NIM} NIM先手必胜,当且仅当 A 1 xor A 2 xor A 3 xor ⋯ xor A n A_1\operatorname{xor}A_2\operatorname{xor}A_3\operatorname{xor}\cdots\operatorname{xor}A_n A1xorA2xorA3xor⋯xorAn不等于 0 0 0,证毕。