• 【科技】原根的快速判断方法以及对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)$,但如果已知模数并且其因子个数并不多的话,这不失为一个简洁有效的做法。

  • 相关阅读:
    fileToBase64互转
    termux
    WindowManager.LayoutParams的各种flag含义 不及格的程序员
    Docker:解决无法停止Container的问题
    常用的一些命令行工具
    disk2vhdhypervbootfailurewithgen2server
    kubeadmin 安装k8s 1.23.3
    hadoop集群搭建
    halcondev_display_shape_matching_results显示基于形状的匹配结果
    halconfit_rectangle2_contour_xld对轮廓进行矩形拟合
  • 原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/9905786.html
Copyright © 2020-2023  润新知