Description

Claris 和 NanoApe 在玩石子游戏,他们有 \(n\) 堆石子,规则如下:

  1. Claris 和 NanoApe 两个人轮流拿石子,Claris 先拿。
  2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后 \(1\) 颗石子的人获胜。

不同的初始局面,决定了最终的获胜者,有些局面下先拿的 Claris 会赢,其余的局面 Claris 会负。

Claris 很好奇,如果这 \(n\) 堆石子满足每堆石子的初始数量是不超过 \(m\) 的质数,而且他们都会按照最优策略玩游戏,那么 NanoApe 能获胜的局面有多少种。

由于答案可能很大,你只需要给出答案对 \(10^9+7\) 取模的值。

Input

输入包含多组数据,每组数据一行两个正整数 \(n\) 和 \(m\)。

Output

每行一个整数表示答案。

Sample Input

3 7
4 13

Sample Output

6
120

HINT

\(1\le n\le 10^9, 2\le m\le 50000\)

不超过 \(80\) 组数据。

Solution

NIM 游戏先手必胜的条件是每堆石子数的异或和为 \(0\)。

相当于将一个只有质数次项的系数是 \(1\),其他项的系数是 \(0\) 的 \(m\) 次多项式 \(fwt\) 异或卷积 \(n\) 次,最后输出常数项。

Code

#include <cstdio>const int mod = 1000000007, inv = 500000004;
int n, m, nn, p[5135], np[50001], tot, a[65540], b[65540];void euler(int n) {for (int i = 2; i <= n; ++i) {if (!np[i]) p[++tot] = i;for (int j = 1; j <= tot && i * p[j] <= n; ++j) {np[i * p[j]] = 1;if (i % p[j] == 0) break;}}
}
void fwt(int *a, int f) {for (int i = 1; i < n; i <<= 1)for (int j = 0, r = i << 1; j < n; j += r)for (int k = 0; k < i; ++k) {int x = a[j + k], y = a[i + j + k];a[j + k] = 1LL * (x + y) % mod, a[i + j + k] = 1LL * (x + mod - y) % mod;if (f == -1) a[j + k] = 1LL * a[j + k] * inv % mod, a[i + j + k] = 1LL * a[i + j + k] * inv % mod;}
}
int fastpow(int k) {for (; k; k >>= 1) {if (k & 1) for (int i = 0; i < n; ++i) b[i] = 1LL * b[i] * a[i] % mod;for (int i = 0; i < n; ++i) a[i] = 1LL * a[i] * a[i] % mod;}fwt(b, -1); return b[0];
}
int main() {euler(50000);while (~scanf("%d%d", &nn, &m)) {for (n = 1; n <= m; n <<= 1) {}for (int i = 0; i < n; ++i) a[i] = 0;for (int i = 1; i <= tot && p[i] <= m; ++i) a[p[i]] = 1;fwt(a, 1);for (int i = 0; i < n; ++i) b[i] = a[i];printf("%d\n", fastpow(nn - 1));}return 0;
}

转载于:https://www.cnblogs.com/fly-in-milkyway/p/10329231.html

[BZOJ 4589] Hard Nim相关推荐

  1. BZOJ 4589 Hard Nim

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4589 题解 求F(0)F(0)F(0),FFF满足 F=Pn" role=&q ...

  2. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  3. 解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. BZOJ 3105:[cqoi2013]新Nim游戏

    BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子 ...

  5. Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)

    4147: [AMPPZ2014]Euclidean Nim Time Limit: 1 Sec Memory Limit: 256 MB Description Euclid和Pythagoras在 ...

  6. 拟阵:贪心原理(bzoj 3105: [cqoi2013]新Nim游戏)

    拟阵:贪心算法的理论基础 拟阵是满足下列条件的一个序队M = (S, I) ①S是一个有穷的集合,I是集合的集合且非空 ②I具有遗传性质:如果集合B∈I 且 A⊂B,则A∈I,即若B∈I,则B是S的独 ...

  7. bzoj 1022: [SHOI2008]小约翰的游戏John(反nim游戏)

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...

  8. BZOJ P2819 Nim

    要求某一个路径上的xor和 我们知道xor的一个性质a xor b xorb =a 也就是一个数xor两边之后其实是抵消掉的 知道了这个性质我们开始下面的分析 若两个点在同一条路径上,那么我们假设为x ...

  9. BZOJ 1022 Luogu P4279 [SHOI2008]小约翰的游戏 (博弈论)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022 (luogu) https://www.luogu.org/pro ...

  10. BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)

    怎么SDOI2011和SDOI2019的两道题这么像啊..(虽然并不完全一样) 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?i ...

最新文章

  1. 量子位「MEET 2021智能未来大会」来啦!邀智能科技企业共探明日行业新格局
  2. Linux常用基本命令:三剑客命令之-awk输入输出分隔符
  3. js密码强度正则表达式_这20个正则表达式,能让你少写100行代码
  4. python是通用编程语言吗-2020年,编程语言将不再只属于程序员,尤其是这门语言...
  5. Larbin使用方法2
  6. AES加密 — 详解
  7. 三层设计模式初步分离
  8. 51单片机mysql_51单片机的定时器
  9. css 点击效果_使用CSS实现逼真的水波纹点击效果
  10. 解决vSphere性能不佳的技巧
  11. 关于在阅读nnUNet代码中的一些小细节的记录(一)
  12. 各种交换机端口安全总结(配置实例)
  13. ObjC学习8-重头戏来了!Foundation框架
  14. L325 如何睡觉
  15. 定时器(setTimeout/setInterval)调用带参函数失效解决方法
  16. 【Golang】go程序性能测试教程+总结
  17. 使用Python破解通达信股票数据
  18. Linux:CentOS 7 解压 7zip 压缩的文件
  19. C#,编写制作《扫雷》游戏代码的前传——作弊手段大曝光
  20. MongoDB——explain执行计划详解

热门文章

  1. python regularexpress1
  2. JS控制文本框内键盘上下左右键的焦点
  3. (第十一周)俄罗斯方块测试报告
  4. 异常处理与调试 - 零基础入门学习Delphi50
  5. 103 解决粘包问题
  6. day16 Python 类的继承关系
  7. IEnumerableT list注意事项
  8. 学习Cocos2d的博客 --推荐
  9. 乌合之众(大众心理研究)之三:群体的一般特征
  10. java编程 停等协议_在应用层模拟实用停等协议