Problem
Hard Nim
Description
和在玩石子游戏,他们有堆石子,规则如下:
- 和两个人轮流拿石子,先拿。
- 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。
不同的初始局面,决定了最终的获胜者,有些局面下先拿的会赢,其余的局面会负。
很好奇,如果这堆石子满足每堆石子的初始数量是不超过的质数,而且他们都会按照最优策略玩游戏,那么能获胜的局面有多少种。
由于答案可能很大,你只需要给出答案对取模的值。
Input
输入文件包含多组数据,以EOF
为结尾。
对于每组数据,输入一行两个正整数和。
Output
Sample Input
1 | 3 7 |
Sample Output
1 | 6 |
HINT
每组数据有, 。
不超过组数据。
Source
Topcoder SRM 518 Div1 Hard Nim By Tangjz
标签:FWT
Solution
裸题。
由基础博弈可知,游戏先手必胜的充要条件是所有石子堆个数异或和为。于是答案为
预处理不超过的质数,设有个。设为一个数组,其中,则均为。用推,可知。同理。这样做次即可得到。最终答案为。
注意到从推到是异或卷积的形式,于是可以用优化,总复杂度。
Code
1 |
|