在很多地方都用到了原根,比如 NTT 用到了原根的性质,比如离散对数需要用到的指标也与原根有关。
然而在此之前我对原根并不是非常了解,所以来补一补知识盲区。
定义
称 g g g 为 p p p 的原根,当且仅当 g g g 在 m o d p mod \;p modp 意义下的阶为 φ ( p ) \varphi(p) φ(p) (这里的 φ ( p ) \varphi(p) φ(p) 是欧拉函数)。
p.s. 若 g , p g,p g,p 互质, n n n 是满足 g n ≡ 1 m o d m g^n\equiv 1\mod m gn≡1modm 的最小正整数 , 称 n n n 为 g g g 模 p p p 的阶。
性质
根据定义,有
∀ i , j ∈ [ 0 , φ ( p ) − 1 ] , i ≠ j , g i ≢ g j m o d p \forall i,j\in[0,\varphi(p)-1],i\neq j,g^i\not\equiv g^j\mod p ∀i,j∈[0,φ(p)−1],i=j,gi≡gjmodp
证明很显然,可以用反证法:
若 g g g 是 p p p 的原根,且 ∃ i , j ∈ [ 0 , φ ( p ) − 1 ] , i ≠ j , g i ≡ g j m o d p \exist i,j\in[0,\varphi(p)-1],i\neq j,g^i\equiv g^j\mod p ∃i,j∈[0,φ(p)−1],i=j,gi≡gjmodp
那么 g ∣ i − j ∣ ≡ 1 m o d p g^{|i-j|}\equiv 1\mod p g∣i−j∣≡1modp
因为 i , j ∈ [ 0 , φ ( p ) − 1 ] , i ≠ j i,j\in[0,\varphi(p)-1],i\neq j i,j∈[0,φ(p)−1],i=j
所以 0 < ∣ i − j ∣ < φ ( p ) − 1 0<|i-j|<\varphi(p)-1 0<∣i−j∣<φ(p)−1
由性质可知 g g g 不是 p p p 的原根。
求原根
做法:
还是利用原根的定义。
将欧拉函数质因数分解 φ ( p ) = ∏ p i k i \varphi(p)=\prod p_i^{k_i} φ(p)=∏piki
若一个数 g g g 满足 ∀ i , g φ ( p ) p i ≠ 1 m o d p \forall i,g^{\frac{\varphi(p)}{p_i}}\neq 1\mod p ∀i,gpiφ(p)=1modp ,那么他是 p p p 的一个原根。
证明:
证明用到裴蜀定理。
假设存在一个 k < φ ( p ) k<\varphi(p) k<φ(p) 使得 g k ≡ 1 ( m o d p ) g^k\equiv 1(mod\;p) gk≡1(modp)
根据裴蜀定理,一定存在一组 a , b a,b a,b 满足 a ⋅ k − b ⋅ φ ( p ) = g c d ( k , φ ( p ) ) a\cdot k-b\cdot\varphi(p)=gcd(k, \varphi(p)) a⋅k−b⋅φ(p)=gcd(k,φ(p))
所以 g k ≡ g g c d ( k , φ ( p ) ) + b ⋅ φ ( p ) ≡ g g c d ( k , φ ( p ) ) ≡ 1 ( m o d p ) g^k\equiv g^{gcd(k, \varphi(p))+b\cdot\varphi(p)}\equiv g^{gcd(k,\varphi(p))}\equiv 1(mod \; p) gk≡ggcd(k,φ(p))+b⋅φ(p)≡ggcd(k,φ(p))≡1(modp)
因为 k < φ ( p ) k<\varphi(p) k<φ(p) 所以 g c d ( k , φ ( p ) ) < φ ( p ) gcd(k,\varphi(p))<\varphi(p) gcd(k,φ(p))<φ(p)
又因为 g c d ( k , φ ( p ) ) ∣ φ ( p ) gcd(k,\varphi(p))|\varphi(p) gcd(k,φ(p))∣φ(p)
所以一定存在一个 g φ ( p ) p i ≡ 1 ( m o d p ) g^{\frac{\varphi(p)}{p_i}}\equiv 1(mod\; p) gpiφ(p)≡1(modp) ,通过检验这些数就可以知道一个数是不是原根了。
应用
1.指标
指标函数 I ( x ) I(x) I(x) 定义如下:
g I ( x ) ≡ x m o d p g^{I(x)}\equiv x\mod p gI(x)≡xmodp
可以对比一下连续的对数:
a log a x = x a^{\log_ax}=x alogax=x
可以发现两者非常相似。 I ( x ) I(x) I(x) 也就是离散对数。与一般意义下的对数性质也非常相似,可以在取模意义下把乘法变成加法,把乘方变成乘法。
详情请见 [SDOI2015]序列统计 。
2.NTT
NTT 用原根来代替实数中使用的单位根 ω \omega ω 。
设 g g g是质数 p p p的原根,再设 ω n = g ( p − 1 ) / n \omega_n=g^{(p-1)/n} ωn=g(p−1)/n( p p p满足 n ∣ p − 1 n|p-1 n∣p−1)。
- ω n n ≡ 1 ( m o d p ) \omega_n^{n}\equiv 1(mod\; p) ωnn≡1(modp)
- ω n 0 , ω n 1 , … , ω n n − 1 \omega_n^0,\omega_n^{1},\dots,\omega_n^{n-1} ωn0,ωn1,…,ωnn−1 在 m o d p mod\; p modp 意义下互不相同
- ω n k ≡ − ω n k + n / 2 \omega_n^k\equiv -\omega_n^{k+n/2} ωnk≡−ωnk+n/2即 ω n n / 2 ≡ − 1 ( m o d p ) \omega_n^{n/2}\equiv-1(mod\; p) ωnn/2≡−1(modp)
第 2 点保证了能够插值,第 3 条保证了 INTT(不知道是不是这么叫,反正就是类似 IDFT 的过程)的进行。