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