题解 - P5285 [十二省联考 2019] 骗分过样例

Subtask 1

1-3

19**x mod 998244353。

4

19**x mod ?。发现模数大概率是 1e6~2e6(输出没有超过 1.5e6 的),暴力跑。

5

19**x mod ?。利用正则表达式找到了两个四位数的输入,用 py 暴力得到了 $19^a$ 和 $19^b$,因为有了结果 $x, y$,可以确定模数为 $\gcd(19^a-x, 19^b-y)$ 的某个因数。然后发现这个 $\gcd$ 是质数,所以模数就是它。

6

看起来像是 19**x mod 998244353,但是名字带个 wa。看看输出发现有负数,大概是溢出了。再结合提示里关于 int 溢出的信息,可以推测是暴力乘/快速幂用 int 忘了乘上 1ll。利用 py 验证,发现前者符合结果。

7

输入变大了。显然,只要一个数出现了两次,之后就一直会循环。如果循环节不大就解决了。所以考虑求一下循环(行不通的话去试其它的)。

通过 map 暴力得到了循环节为 55245 + 45699k。

Subtask 2

8-10

给一个长度不超过 $10^6$ 的区间,判断区间每个数是否为质数。直接上 MR。

这里我在卡常上花了很长时间,然后意识到判掉 $2, 3, 5$ 的倍数就行了。

11

2u,并且输出是 0+-,一眼是莫比乌斯函数。$10^6$ 可以直接线性筛。

12-13

同样是 2u,数变大了不能筛了。考虑除掉每个 $10^6$ 以下的质数,那么之后一个数必不可能含有三个质因子。先 MR 确定是否一个质因子,否则若为平方数(开根号即可确定)则 mu=0,否则 mu 不需要改动(乘两个 -1)。

14

g?原根?#验证一下

暴力判定试试。能过。

15

原根,但是这个模数是一堆质数乘起来,判起来会很慢,根本过不了。考虑先暴力出最小原根 $g$,之后所有原根一定形如 $g^p \bmod m$,其中 $\gcd(p, \varphi(m)) = 1$。

16

考虑枚举每个数是否可能为模数。第一遍筛选的时候,只检查前 50 项,以得到较快的速度(大约 0.5h 跑完);第二遍筛选的时候,我取了前 369 项(保证正确性),只得到了一个模数:1515343657。之后就可以做了。

下一篇