zoukankan      html  css  js  c++  java
  • 关于原根

    时隔两三个月重新打$ntt$的时候,已经忘记了常见模数的原根。

    想要回忆原根的求法,以备不时之需,然而也忘记了。

    所以颓了大神$yxs$的证明博客,为了防止再次遗忘,来复读一遍大神的做法和证明。

    做法:

    因为原根往往很小,所以可以采用暴力枚举的方法。

    然而直接暴力$check$的复杂度并不是合法的。

    一个可行的$check$方法:

    对$varphi(p)$质因数分解,得到$y_i=frac{varphi(p)}{p_i}$

    设当前$check$的数为$x$

    对每个$y_i$,快速幂求出$x^{y_i}$,若均不为$1$,那么$x$为$p$的一个原根。

    证明:

    若$x^i equiv 1$ $(mod p)$,有$x^{i*k} equiv 1$ $(mod p)$。

    若存在$x^k equiv 1$ $(mod p)$ $(0<k<varphi(p))$,$x$一定不为原根,所以该做法具有必要性。

    下面通过反证证明充分性。

    设存在$x^k equiv 1$ $(mod p)$ 其中$k$不被任意$y_i$整除。

    一定存在一组$u,v$满足$u*k+v*varphi(p)=gcd(k,varphi(p))$。

    有$u*k=gcd(k,varphi(p))-v*varphi(p)$。

    因为$x^{u*k} equiv 1$ $(mod p)$,

    有$x^{gcd(k,varphi(p))-v*varphi(p)} equiv 1$ $(mod p)$

    因为$x^{v*varphi(p)} equiv 1$ $(mod p)$,

    有$x^{gcd(k,varphi(p))} equiv 1$ $(mod p)$

    显然存在$y_i$为$gcd(k,varphi(p))$的倍数,所以不存在这样的$k$。

  • 相关阅读:
    Gvim快捷键学习
    一步一步学习Vim 全图解释
    经典vim插件功能说明、安装方法和使用方法介绍
    中国数学数字图书馆
    RQNOJ第一题---PID1 / 明明的随机数
    gdb常用命令
    linux c下mysql编程样例
    linux c编程 -- 线程互斥
    linux c多线程编程范例
    数据结构 -- 可重用模块的接口设计模板
  • 原文地址:https://www.cnblogs.com/skyh/p/12012586.html
Copyright © 2011-2022 走看看