问题 K: 取石子游戏

内存限制:132 MB 时间限制:12 S
题面:传统 评测方式:文本比较 上传者:
提交:2 通过:2

题目描述

由于 Serika 是今天的值日生,需要协助老师完成工作,因此现在 Abydos Countermeasure Committee 的活动室里只有四个人。Ayane 和 Nonomi 制作了一个颇为有趣的取石子游戏,并邀请 Shiroko 和 Hoshino 来体验。

游戏开始前有一个非空正整数 不可重集合 SS。桌面上将会摆放 ∣S∣S 堆石堆,SS 中的每一个元素 ii 都对应着一堆石子数量为 ii 的石堆。在游戏中 Shiroko 和 Hoshino 需要交替做出以下操作:

  1. 操作者任意选择一堆石堆(设其中石子数量为 xx)与一个正整数 yy 满足 x≥yxy 且 xx 与 yy 的最大公约数为 11
  2. 从选择的石堆中取出 yy 个石子(若石堆中的石子此时被取光,也就是 x=yx=y,则这堆石堆将不复存在)。

游戏由 Shiroko 先手。若轮到某人操作时桌面上不存在任何石堆,那么此人落败,另一人获胜。

为了增加难度,Ayane 和 Nonomi 制订了一些额外规则。Ayane 给定了一个 有特殊性质 的大整数 NN,Nonomi 给定了一个 有特殊性质 的正整数集合 RR。具体性质见 输入/输出格式。她们希望 SS 满足其中的所有元素均大于 11 且它们的乘积为 NN,并且 S∩R=∅SR=

假设 Shiroko 和 Hoshino 总是按照最优策略玩游戏。现在,你需要计算分别有多少个满足上述条件的 SS 使得在游戏中 Shiroko 和 Hoshino 各自必胜,答案对 10000000071000000007 取模。

输入格式

本题包含多组测试数据。

来自 Ayane 和 Nonomi 的温馨提示:本题输入输出量较大,对于使用 C++ 语言参加竞赛的选手,强烈建议使用关闭同步流的 cin 和 cout 完成输入输出。

首先在第一行输入一个整数 TT1≤T≤201T20)表示测试数据组数。

对于每一组测试数据,输入包含四行。

第一行包含一个整数 nn1≤n≤181n18),表示 NN 的质因子个数。

第二行包含 nn 个质数 p1,p2,p3,⋯,pnp1,p2,p3,,pn2≤p1<p2<p3<⋯<pn≤1072p1<p2<p3<<pn107),表示 NN 的质因子序列。

第三行包含一个整数 mm0≤m≤2n0m2n),表示集合 RR 的大小。

第四行包含 mm 个整数 a1,a2,a3,⋯,ama1,a2,a3,,am0≤a1<a2<a3<⋯<am<2n0a1<a2<a3<<am<2n),表示集合 RR 每个元素的特殊表示。

特殊性质:NN 为若干不同质数之积,且集合 RR 中的所有元素均是 NN 的因数。你需要通过以下等式计算 NN 与集合 RR 中的元素 xixi1≤i≤m1im)的值:N=∏j=1npjN=j=1npjxi=∏j=1npj[(ai bitand 2j−1)>0]xi=j=1npj[(ai bitand 2j1)>0]其中 bitandbitand 表示二进制按位与,[P][P] 的值根据条件 PP 的真假决定,若 PP 为真,则 [P]=1[P]=1,否则 [P]=0[P]=0

输出格式

对于每一组测试数据,输出包含一行两个整数表示使得在游戏中 Shiroko 和 Hoshino 各自必胜的 SS 的数量对 10000000071000000007 取模后的值。

输入样例 复制

2
5
2 5 7 13 19
0

9
2 3 5 7 11 13 17 19 23
2
4 6

输出样例 复制

51 1
14749 1381

数据范围与提示

在样例的第一组测试数据中,使得在游戏中 Hoshino 必胜的 SS 仅有一个,满足 S={17290}S={17290}。而剩余的 5151 个满足条件的 SS 均会使得在游戏中 Shiroko 必胜。

请注意代码的常数。

分类标签