【科技】原根的快速判断方法以及对1求离散对数的另一种想法

鉴于实际需要,本文中所选的模数$p$总是一个平凡质数,并且如果没有特殊说明总是在模$p$意义下进行运算,并用$varphi$表示$varphi (p) = p - 1$。

原根的定义:

基于$p$是质数,我们可以很简单的把它的定义想成,如果一个数$a in [0, p - 1]$是原根的充要条件是对于$x in [0, p - 2]$,$a^{x}$互不相同。

但根据定义讲,判断一个数$a$是否是$p$的原根是$O(p)$的,不够优秀。

原根的快速判定方法:

首先给出结论,数$a$是$p$的原根当且仅当对于$varphi$的任意一个质因子$d$,都没有$a^{frac{varphi}{d}} equiv 1(mod ; p)$。

接下来给出其证明:

如果$a$是原根,那显然不存在任何一个$x in [0, varphi - 1]$使得$a^{x} equiv 1$。

现在我们主要要证明对于所有非原根的$a$都有一个$varphi$的质因子$d$,使得$a^{frac{varphi}{d}} equiv 1$成立。

引理1:如果$a$不是原根,那一定存在一个$x in [0, varphi - 1]$,使得$a^{x} equiv 1$。

  • 这个命题其实可以有另一种说法,就是在出现上述的这样一个$x$之前,不会有有一个值重复被$a$的幂次表示。$a$的幂次的值在模$p$意义下应当是一个环,由于逆元是唯一的,显然不存在两个不同的数他们乘上$a$变成同一个数。所以$a$的幂次中第一个重复出现的数一定是$1$。

于是我们只需证明对于某一个$a$,如果存在$x in [1, varphi - 1]$,使得$a^{x} equiv 1$,那一定有一个$varphi$的质因子$d$,使得$a^{frac{varphi}{d}} equiv 1$成立。

 引理2:如果有$a^{i} equiv 1, a^{j} equiv 1, 0 leq j leq i$,则有$a^{(i, j)} equiv 1$成立。

  • 这个看起来不那么显然,如果把上述结论改成“有$a^{i - j} equiv 1$成立”看起来就很对了。这恰好满足了辗转相减的特性。

 由于$a^{varphi} equiv 1$,并设$g = (x, varphi)$,得$a^{g} equiv 1$,因为$x < varphi$,所以$g < varphi$,$g$与$varphi$之间差了至少一个$varphi$的质因子$d$,我们可以让$g$乘上某些数变成$frac{varphi}{d}$,而$1$的幂次总是$1$。于是就得证了。

综上所述,我们判断一个数$a$是否是原根,只需枚举$varphi$所有的质因子$d$,看是否有$a^{frac{varphi}{d}} equiv 1$,若有则$a$不是原根。其复杂度为$O(log^2p)$。

 对$1$求离散对数的另一种想法:

对于某一个平凡的数$a$,要求最小的正整数$x$满足$a^{x} equiv 1$。

这是一个Simple的问题,因为对于一个平凡的情况,我们已经有十分优秀的$Bsgs$做法,并且它不局限于对$1$求离散对数,但今天我想说的并不是这个。事实上,一个合法的解$x$一定是$varphi$的一个因子。

如果延续我们之前判断原根的思路,那这个问题是十分容易解决的。如果有$a^{x} equiv 1$存在,同样设$g = (x, varphi)$,有$a^{g} equiv 1$成立,$g$显然是$varphi$的一个因子,当$x$是极小的,就要有$x = g$。

但使用这个方法的局限性很明显,它只能对$1$求离散对数,因为我们在这之中利用了$1$的特殊性质。而且这个方法的复杂度并没有太显著的优势,如果$varphi$的因子数量很多的话,最劣是$O(sqrt[3]{p}logp)$,但如果已知模数并且其因子个数并不多的话,这不失为一个简洁有效的做法。

原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/9905786.html