QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-13 00:29:10

Last updated: 2025-12-13 00:29:12

Back to Problem

题解

每个 $\sqrt {a_i}$ 都能唯一表示成 $b_i\sqrt {c_i}$,其中 $c_i$ 无平方因子。求出这样的表示后,对所有 $c_i$ 相同的 $b_i$ 分别做,然后方案数相乘即可。当 $a_i$ 特别大时,无法快速求出表示。我们考虑随机一些素数 $p$(假设所有 $a_i$ 都不是 $p$ 的倍数),判断 $a_i$ 是否是模 $p$ 的二次剩余,如果两个数在所有测试中的结果都相同,则认为它们对应的 $c_i$ 相同。如果选择了 $k$ 个素数,则这样的正确率约为 $1-\frac{1}{2^k}$。对每个 $c_i$ 相同的集合,以及一个满足 $c_i$ 是模 $p$ 的二次剩余的素数 $p$,对每个 $a_i$ 开根,然后 meet in the middle,就能求出模 $p$ 为 $0$ 的集合个数,这一步的正确率约为 $1-\frac{2^n}{p}$。

时间复杂度:假设选择了 $k$ 个大小为 $p$ 的素数,则总时间复杂度为 $O(nk(\log a_i+\log p)+2^{n/2}n)$。

(好像还有更简单的方法,不求出每个 $c_i$ 对应的集合,而是直接做,但是可以 hack。)

Comments

No comments yet.