前言:
原根和指标在数论中有大量的性质和规律,这里无法一一列举,只能简要写写用到的概率大一些的内容。本文是博主在复习时总结用,许多证明都已经略去,不建议初学者参考(速食主义者除外)。
主要包括:原根的定义及基本性质,求法,指标的定义,以及指标的基本应用。
原根
定义及性质:
要说明原根的完整定义,又要扯到阶那一块,这里就直接用一句话大致表示了:
若
a" role="presentation" style="position: relative;">a为模m的原根
那么必然满足
(a,m)=1" role="presentation" style="position: relative;">(a,m)=1且
aφ(m)≡1 (mod m)" role="presentation" style="position: relative;">aφ(m)≡1 (mod m),并且不存在一个正整数
l<φ(m)" role="presentation" style="position: relative;">l<φ(m),使得
al≡1(mod m)" role="presentation" style="position: relative;">al≡1(mod m)
下面给出一些原根的基本性质(证明略)
性质1:设g为模m的原根,那么其充要条件是{g,g2,g3,……gφ(m)}" role="presentation" style="position: relative;">{g,g2,g3,……gφ(m)}组成模m的一个既约剩余系。
.
性质2:若m有原根,其必然满足:m=2,4,pα,2∗pα" role="presentation" style="position: relative;">pα,2∗pα,否则没有原根
.
性质3:若m有原根,那么其恰好有φ(φ(m))" role="presentation" style="position: relative;">φ(φ(m))个在模m意义下不同的原根。
这三条是原根最常用的性质,也是后面需要用到的。
原根求法:
对于一个存在原根的数m,其最小原根一般都不大,所以求m的最小原根的复杂度会很玄学(非常小)。。但如果要求所有原根,那复杂度就是妥妥的O(mlogm)了。
其实数论中并没有直接求原根的方式,但有快速检验是否为原根的方式。
将
φ(m)" role="presentation" style="position: relative;">φ(m)因数分解,即
φ(m)=p1k1p2k2……pnkn" role="presentation" style="position: relative;">φ(m)=pk11pk22……pknn如果一个数
g" role="presentation" style="position: relative;">g是模m的原根,则其必然满足对于任意一个
1≤i≤n" role="presentation" style="position: relative;">1≤i≤n,
gφ(m)pi≠1(mod m)" role="presentation" style="position: relative;">gφ(m)pi≠1(mod m)
所以一次check的复杂度就是
φ(m)" role="presentation" style="position: relative;">φ(m)的质因子个数*快速幂复杂度。
然后根据目标强行枚举就可以了。
指标(离散对数)
根据原根的性质1,
g1,g2,g3……gφ(m)" role="presentation" style="position: relative;">g1,g2,g3……gφ(m)组成模m的一个既约剩余系。
指标用
I" role="presentation" style="position: relative;">I表示,满足:
I(gx)=x" role="presentation" style="position: relative;">I(gx)=x(这个定义和对数函数非常类似,所以指标又称作离散对数)
并且,它与对数函数也有许多共同的性质:
I(ab)=I(a)+I(b)" role="presentation" style="position: relative;">I(ab)=I(a)+I(b)
I(ak)=k×I(a)" role="presentation" style="position: relative;">I(ak)=k×I(a)
证明非常简单
gI(ab)≡ab≡gI(a)∗gI(b)≡gI(a)+I(b)(mod m)" role="presentation" style="position: relative;">gI(ab)≡ab≡gI(a)∗gI(