在很多地方都用到了原根,比如 NTT 用到了原根的性質,比如離散對數需要用到的指標也與原根有關。
然而在此之前我對原根並不是非常瞭解,所以來補一補知識盲區。
定義
稱 g 爲 p 的原根,當且僅當 g 在 modp 意義下的階爲 φ(p) (這裏的 φ(p) 是歐拉函數)。
p.s. 若 g,p 互質, n 是滿足 gn≡1modm 的最小正整數 , 稱 n 爲 g 模 p 的階。
性質
根據定義,有
∀i,j∈[0,φ(p)−1],i=j,gi≡gjmodp
證明很顯然,可以用反證法:
若 g 是 p 的原根,且 ∃i,j∈[0,φ(p)−1],i=j,gi≡gjmodp
那麼 g∣i−j∣≡1modp
因爲 i,j∈[0,φ(p)−1],i=j
所以 0<∣i−j∣<φ(p)−1
由性質可知 g 不是 p 的原根。
求原根
做法:
還是利用原根的定義。
將歐拉函數質因數分解 φ(p)=∏piki
若一個數 g 滿足 ∀i,gpiφ(p)=1modp ,那麼他是 p 的一個原根。
證明:
證明用到裴蜀定理。
假設存在一個 k<φ(p) 使得 gk≡1(modp)
根據裴蜀定理,一定存在一組 a,b 滿足 a⋅k−b⋅φ(p)=gcd(k,φ(p))
所以 gk≡ggcd(k,φ(p))+b⋅φ(p)≡ggcd(k,φ(p))≡1(modp)
因爲 k<φ(p) 所以 gcd(k,φ(p))<φ(p)
又因爲 gcd(k,φ(p))∣φ(p)
所以一定存在一個 gpiφ(p)≡1(modp) ,通過檢驗這些數就可以知道一個數是不是原根了。
應用
1.指標
指標函數 I(x) 定義如下:
gI(x)≡xmodp
可以對比一下連續的對數:
alogax=x
可以發現兩者非常相似。 I(x) 也就是離散對數。與一般意義下的對數性質也非常相似,可以在取模意義下把乘法變成加法,把乘方變成乘法。
詳情請見 [SDOI2015]序列統計 。
2.NTT
NTT 用原根來代替實數中使用的單位根 ω 。
設g是質數p的原根,再設ωn=g(p−1)/n(p滿足n∣p−1)。
- ωnn≡1(modp)
- ωn0,ωn1,…,ωnn−1 在 modp 意義下互不相同
- ωnk≡−ωnk+n/2即ωnn/2≡−1(modp)
第 2 點保證了能夠插值,第 3 條保證了 INTT(不知道是不是這麼叫,反正就是類似 IDFT 的過程)的進行。