「二次剩余」Tonelli - Shank's algorithm


传统的 cipolla 算法很精巧 但是我背不到 但是不好拓展到模任意数的情况。

事实上我现在都还不清楚,对于 \(k > 1\),环 \(R(Z_{p^k},+,\times)\) 到底有什么特殊性质。

首先它不是整环,然而就我所看的抽代教材中只讨论了整环的特殊性。。。

由 crt,模任意数等价于考虑模 \(p^k\) 的情况。

分三步:模奇素数 \(p\)、模奇素数幂 \(p^k(k>1)\) 以及模 \(2^k\)


模奇素数 p

\(n\) 是二次剩余,求解方程 \(x^2 = n\bmod p\)

\(\varphi(p) = 2^t\times s\),其中 \(s\) 为奇数。由 \(n\) 是二次剩余,可得 \(n^{2^{t-1}\times s}=1\bmod p\),变形可得 \((\frac{n^{s+1}}{n})^{2^{t-1}} = 1\bmod p\)

\(x_{t-1} = n^{\frac{s+1}{2}}\),则有 \((\frac{x_{t-1}^2}{n})^{2^{t-1}} = 1\bmod p\),其中 \(x_0\) 即是答案。

现考虑 \(x_{i}\to x_{i - 1}\)。计算 \(A = (\frac{x_i^2}{n})^{2^{i-1}} \bmod p\),当 \(A = 1\) 时取 \(x_{i-1} = x_i\);否则取 \(x_{i-1} = \lambda x_i\),其中 \(\lambda^{2^i} = -1\)

等价于需要找到 \(\lambda\) 满足 \(ord(\lambda) = 2^{i+1}\)。当然可以通过原根找,也可以考虑如下的方法:

随机二次剩余 \(a\),则 \(a = g^u\),其中 \(u\) 为奇数。则 \(ord(a^s)=\frac{2^t\times s}{\gcd(2^t\times s,us)}=2^t\),即可构造出 \(\lambda\)

这个方法在 https://hly1204.blog.uoj.ac/blog/6422 中也被提到。


模奇素数幂 p^k(k>1)

https://www.luogu.com.cn/problem/solution/P6091 :证明原根在模 \(2,4,p^k,2p^k\) 下存在的充要性。

既然原根是存在的,那么方法和上面几乎一样。

只是注意 \(n\) 可能含有 \(p\) 因子,需要预先处理。


模 2^k

\(k = 1,2\) 时是平凡的。

\(k = 3\) 时,仅 \(n = 1\) 时有解 \(x = 1, 3, 5, 7\)

注意 \(a\equiv b\bmod p^{k+1}\) 的必要条件是 \(a\equiv b\bmod p^k\),因此考虑 \(2^{k}\to 2^{k+1}\)

归纳证明:当且仅当 \(n\bmod 8 = 1\) 时有解,且恰好 4 个解。

由于 \(x^2 = (x+2^{k-1})^2\bmod 2^k\),可以将 4 个解分成两组 \((x_1,x_1+2^{k-1})\)\((x_2, x_2 + 2^{k-1})\)

发现 \(x_1^2\)\((x_1+2^{k-1})^2\)\(\bmod 2^{k+1}\) 时对应 \(n\)\(n + 2^k\)(不一定分别对应),即 \(\bmod 2^{k+1}\) 的一组解。

由此得证。

证明其实也给出了构造方法。


高次剩余?

基本思路一样,主要是 \(\lambda\) 的求解,我还没有看懂怎么来的。

posted @ 2021-02-02 13:25  Tiw_Air_OAO  阅读(226)  评论(0编辑  收藏  举报