先考虑 N=1N = 1N=1 的情况。若先手胜,我们称 aia_iai 为必胜点,否则为必败点。显然 1,2,31,2,31,2,3 均为必胜点;而 4=1+3=2+24 = 1 + 3 = 2 + 24=1+3=2+2,无论如何都是后手胜,所以为必败点。如果这时候你不知道如何去分析,可以尝试打出必败点的表(猜测必败点并不多),对于一个 aia_iai 若无法拆分成质数或 111 与另一个比它小的必败点的形式,那么这个 aia_iai 便是必败点。
//x 为当前需要判断的数 p[1] = p[2] = p[3] = p[5] = p[7] = 1,以此类推
ok = 0;
for (auto i : lose)
if (p[x - i]) ok = 1;//可以拆分
if (!ok) lose.push_back (i)//说明是必败点
通过打表发现必败点都是 444 的倍数。其实这很好理解,由于 444 为最小的必败点,那么对于