二次剩余

考虑若有非 \(0\) 解,那么两个解在模意义下互为相反数。

判定 \(n\) 在模 \(p\) 意义下是否有二次剩余,只要看 \(n^{\frac{p - 1}{2}}\)\(1\) 还是 \(-1\) 即可。

Cipolla 算法流程是,任意随一个 \(a\) 使得 \(a^2 - n\) 不是二次剩余。设 \(i^2 \equiv a^2 - n \pmod p\),注意此时 \(i\) 是模意义下的虚数。

然后可以推出 \(i^p = i \times (i^{\frac{p - 1}{2}})^2 \equiv -i \pmod p\)。所以 \((a + i)^{p + 1} = (a + i)^p (a + i) = (a^p + i^p)(a + i) = (a - i)(a + i) = n\)。那么 \((a + i)^{\frac{p + 1}{2}}\) 为其中一个解。

可以反证法说明 \((a + i)^{\frac{p + 1}{2}}\) 不会存在虚部。假设 \((A + Bi)^2 \equiv n \pmod p\),其中 \(B \ne 0\),展开得 \(A^2 + 2ABi + B^2 i^2 \equiv n \pmod p\),即 \(A^2 - n + B^2 (a^2 - n) \equiv -2ABi \pmod p\)。那么 \(AB \equiv 0 \pmod p\),又因为 \(B \ne 0\),所以 \(A \equiv 0 \pmod p\),那么 \(B^2 i^2 \equiv n \pmod p\),即 \(i^2 \equiv nB^{-2} \pmod p\)。所以 \(i^2\) 存在二次剩余,矛盾。

具体实现时需要实现虚数类。

1. P5491 【模板】二次剩余

模板题。

2. P10063 [SNOI2024] 平方数

考虑一个求二次剩余时需要用到的结论:一个非完全平方数在模奇质数下有接近 \(\frac{1}{2}\) 的概率不是二次剩余。

所以我们随 \(50\)\(10^5\) 级别的小质数(不能随大了,因为要快速算 \(x^{\frac{p - 1}{2}}\)),然后考虑把一个前缀的乘积在这 \(50\) 个质数下是否为二次剩余压进一个状态里面。那么若 \([l, r]\) 乘积为完全平方数那么 \([1, l - 1]\)\([1, r]\) 的状态一定相等,否则有极大的概率不会相等(出错概率可以忽略不计)。然后就可以直接统计了。

posted @ 2024-01-19 21:41  zltzlt  阅读(43)  评论(0)    收藏  举报