什麼叫二次剩餘,其實就是對於給定的p(p∈P)和n ,如果有x 滿足x2≡n(modp) ,那麼n 在模p 意義下就是二次剩餘。其實就是模意義下能否開根號。
我們先定義Fp ,這是一個數域,其實就是0 到p−1 這p 個數與模p 意義下加減乘除運算構成的集合。
定理1:對於x2≡n(modp), 總共有p−12 個的n 能使該方程有解(將n=0 情況除去,由於該情況顯然有x=0 )。
證明:我們只用考慮所有x2 。如果存在不同的兩個數u、v, 它們的平方在模p 意義下同餘,那麼顯然有p|(u2−v2) 。由平方差公式p|(u+v)(u−v) 。顯然p 不可能整除u−v ,因此p 整除u+v ,因此u+v≡0(modp) 。這個結論反過來也是成立的,因此共有p−12 種互不相同的平方,顯然對應了所有有解的n ,而且同一個n 還一定存在兩個互爲相反數的解。
Description:
求解x2≡n(modp) 。p 是一個奇質數。
Solution:
由費馬小定理:
np−1≡1(modp)
所以:
np−12≡±1(modp)
由歐拉準則:
(np)≡np−12(modp)
其中:
(np) 爲勒讓德符號。
因爲x≡n12(modp) ,所以有xp−1≡np−12≡1(modp) 。即:
(np)=⎧⎩⎨⎪⎪1−10n在模p意義下是二次剩餘n在模p意義下不是二次剩餘n≡0(modp)
設:
k=a2−n,ω=k√
則該方程的解爲:
x≡(a+ω)p+12(modp)
證明:若k 是該模意義下的非二次剩餘,
則:
wp−1=np−12=−1 。
同時:
(a+b)p≡ap+bp(modp)
則:
x21≡≡≡≡≡≡≡≡(a+ω)p+1(a+ω)p(a+ω)(ap+ωp)(a+ω)(ap−1a+ωp−1ω)(a+ω)(a−ω)(a+ω)a2−ω2a2−(a2−n)n(modp)
另一解爲:
x2≡−x1(modp)
如何找到這個k 呢。因爲非二次剩餘的個數大約有一半,隨機幾次即可。
話不多說,可以參考資料:
ACdreamer 二次同餘方程的解
二次剩餘Cipolla算法學習小記