给定两个数 n,P , P 为一个质数,且 n<P ,求一个 x ,使得 x2≡n(mod P)
下面所有的运算都在 mod P 意义下进行。
首先我们要判断是否有解。
根据勒让德记号,我们有 nP−12=±1 ,并且上述问题有解当且仅当 nP−12=1
设 a ,满足 w=a2−n , w 对于 P 不是二次剩余。这个 a 直接随机就好了。
那么最终我们有 x=(a+w−−√)P+12
问题是 w−−√ 不存在,我们将 w−−√ 如同虚数 i 一样设定,那么由于最终 x 是一个实数,所以直接当虚数来做快速幂最终取实根即可。
证明:
x=(a+w−−√)P+12
x2=(a+w−−√)P+1=(a+w−−√)P∗(a+w−−√)
由二项式定理得:
(a+w−−√)P=∑Pk=0CkP∗ak∗(w−−√)P−k
又由于当 0<k<P 时, CkP mod P=0 ,所以
又由费马小定理 aP−1=1,wP−12=w−−√P−1=−1
所以
所以 x2=(a−w−−√)(a+w−−√)=a2−w=n
得证