zoukankan      html  css  js  c++  java
  • 原根

    定义:设(m > 1),且((a,m) = 1),使得(a^r equiv 1 mod(m))成立的最小的(r),称为(a)对模(m)的阶,记为(delta_m(a))

    定理:若(m > 1),且((a ,m) = 1)(a^n equiv 1 mod(m)),则(delta_m(a)|n)

    原根

    定义:设(m)是正整数,(a)是整数,若(delta_m(a) = varphi(m)),则称(a)为模(m)的一个原根

    定理:如果模(m)有原根,那么它一共有(varphi(varphi(m)))个原根

    定理:若(g)(m)的一个原根,则(g,g^2,……,g^{varphi(m)})各数对(m)取模的非负最小剩余就是小于(m)且与(m)互质的(varphi(m))个数的一个排列

    原根存在条件

    (m = 2,4,2P^n,P^n),这里的(P)是奇素数(除2以外的素数),(n)是正整数

    求原根的方法

    从2开始枚举,然后暴力判断(g^{P - 1} equiv 1 mod(P))是否只有在指数为(P - 1)的时候成立。

    bool check(int g) {
        int tp = 1;
        for (int i = 1; i < P - 1; ++i) {
            tp = 1ll * tp * g % P;
            if (tp == 1) return 0;
        }
        return false;
    }
    void get() {
        int g = 2;
        for (int i = 2; ; ++i) if (check(i)) {
            g = i;
            break;
        }
    }
    

    模素数求原根的方法

    首先求(varphi(m))的素幂分解式:

    [varphi(m) = p_1^{e_1}*p_2^{e_2}*p_3^{e_3}*·····*p_k^{e_k} ]

    然后枚举(g),若恒满足

    [g^{frac{varphi(m)}{p_i}} e 1 mod(m),i = 1,2,·····,k ]

    (g)(m)的一个原根

  • 相关阅读:
    maven 依赖阿里云仓库
    jacob
    mysql
    简单明了区分escape、encodeURI和encodeURIComponent(转载)
    eclipse
    StringBuffer的构造方法和capacity的返回值关系
    toString和valueOf的区别
    js中ajax返回数据
    springmvc 文件上传
    springmvc 上传文件报错 String不能转成multipartFile
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9749947.html
Copyright © 2011-2022 走看看