DiviDuelo
这里不符合“不能行动的玩家判负”,所以就不要往SG函数想了
我们先模拟样例,会发现\(1\)是一个特别的数字,如果first player拿到了\(1\)那么肯定就输了
于是不难得出结论,如果\(n\)是一个完全平方数,那么first player就G了
那么考虑不是完全平方数,显然这里考虑gcd不是\(1\)非常困难,于是考虑second player怎么样才能赢
由于gcd要为\(1\),不难想到互质,于是对\(n\)进行分解质因数,然后就有了PDF的做法
update 2024.8.4
重新做一遍,做出来了,但是花的时间也挺久的
看到gcd,除了想到去考虑gcd的具体值(此时不一定为质数),还可以去考虑将gcd分解质因数,于是可以考虑最后的gcd可以分解质因数
所以我们将\(N\)分解质因数,然后把所有约数按照质数的个数以及幂写在纸上,不难发现上面的分类讨论(因为first player不可能同时选两个不同的质因数\(p^α\)和\(q^β\))
提醒一点,下面做法是错的:考虑gcd最终的质因子是什么,于是除了这个质因子如果有其他的质因子first player就会输,因为会被强制选不含这个质因子的约数。错误的原因就在于这是博弈论,双方可以根据当前的局势灵活调整,不会死盯着一个目标前进