前言
之前遇到过一些关于二次剩余的题目,因为姿势不够都跳了。由于最近觉得自己的数论姿势严重不足,便觉得有必要来学习一下二次剩余相关的算法。
学完后感觉这个算法作者的脑洞真的是比较大,居然能想出这么巧妙的构造。
关于这个算法的介绍,我比较推荐czy大爷的博文。
前置技能
(以下内容均在模数 p p p为奇素数的前提下讨论)
二次剩余
首先要搞懂什么是二次剩余。若方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2≡a(modp)有解,则称 a a a为 p p p的二次剩余,反之则称 a a a为 p p p的二次非剩余。说白了就是在模意义下能否开根号。
###勒让德符号
勒让德符号是这样定义的:
( a p ) = { 1 , a 为 p 的 二 次 剩 余 − 1 , a 为 p 的 二 次 非 剩 余 0 , a ≡ 0 ( m o d p ) \left(\frac{a}{p}\right)= \begin{cases} 1, & a为p的二次剩余 \\ -1, & a为p的二次非剩余\\ 0, & a\equiv 0\pmod p \end{cases} (pa)=⎩⎪⎨⎪⎧1,−1,0,a为p的二次剩余a为p的二次非剩余a≡0(modp)
欧拉判别法
若 a a a是不被 p p p整除的正整数,则 ( a p ) ≡ a p − 1 2 \left(\frac{a}{p}\right)\equiv a^{\frac{p-1}{2}} (pa)≡a2p−1
证明:
当 ( a p ) = 1 \left(\frac{a}{p}\right)=1 (pa)=1时,方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p