摩尔教授的矿场有 n 条矿脉,矿石有多有少。他最爱的消遣,就是考较来客:每轮您可以挑至多 k 条矿脉各开采任意颗(不许一条都不采),谁取走最后一颗矿石谁赢。教授总是笑眯眯地看着您,因为他的口袋里装着一张写满二进制的小纸条。
这张纸条上的密码,正是 1910 年美国数学家 E. H. Moore 写下的答案——它是 1901 年 Bouton 解出普通 Nim 之后,最自然、也最漂亮的一次推广。
哈佛的 Charles L. Bouton 在 1901 年的《数学年刊》上发表了《Nim, a game with a complete mathematical theory》——第一篇把民间取子游戏彻底解出的论文。他的答案只有一句话:把各堆写成二进制,若每个数位上 1 的个数都是偶数(异或为 0),则轮到谁谁输。
Nim 因此成为组合博弈论的开山样本,「P-位置 / N-位置」这套语言就是从它长出来的。
九年后的 1910 年,芝加哥学派的领袖 Eliakim Hastings Moore(1862–1932,美国数学会首任主席)在《数学年刊》发表《A generalization of the game called Nim》。他把「每次只能动 1 堆」放宽为「每次可动至多 k 堆」,并给出了完整解答。
答案出人意料地整齐:把「偶数」换成「k+1 的倍数」,Bouton 的判据一字不改地成立。k=1 时它退化成 Bouton 的 Nim。
把每条矿脉的矿石数写成二进制、上下对齐。数一数每一个数位上「1」的个数。如果每一位上 1 的个数都是 k+1 的倍数,那么这个局面是「铁桶局」——轮到谁谁输。反之,先手一定有办法一步把它变成铁桶局。
发现了吗?必胜招常常是把几条矿脉拉平。k=2、模 3 的世界里,三条相等的矿脉 (v,v,v) 就是铁桶局——所以 (2,2,2) 先手必败,而 (3,5,6) 只要补成 (3,3,3) 就赢了。
因为您要修正位和。设某一位上 1 的个数是 r。若 r 不是 k+1 的倍数,您希望把它调成倍数;而一次最多动 k 条矿脉,每条在该位上要么保留、要么翻转,最多只能改动 k 个 1——所以「k+1」这个模数是被走法上限逼出来的。
反过来,若所有位都已是 k+1 的倍数,您一动(改了 t ≤ k 条脉),最高被改动的那一位上,1 的个数就变成 r′ = r ± t′,而 0 < t′ ≤ k,于是 r′ 必不再是 k+1 的倍数——铁桶阵自动被破坏。一步之差,胜负已分。
Moore 的判据后来被反复推广:每次动至多 k 堆、每堆至多取 m 颗的「Nim_k(m)」,以及「按位和模 k+1」这类判据的适用范围(Jenkyns–Mayberry 1980 指出 Moore 判据对更一般的规则并不总成立,需要额外条件)。
今天它仍是组合博弈论与算法博弈论里的标准例题——也是理解「二进制位独立」这一思想的绝佳入口。