zoukankan      html  css  js  c++  java
  • 原根

    定义:

    { (xi mod p) | 1 <= i <= p-1 } = { 1, ..., p-1 }  p是素数

    则称x为p的原根

    即  p为素数,如果x的1——p-1次方 模 p-1  各不相同,则称x为p的原根

    一个数可能不只有一个原根

    求p的原根的方法:

    若x^(p-1)%p=1,当且仅当指数为p-1的时候成立,那么x是p的一个原根

    特殊性质:

    奇素数p的原根个数为φ(p-1)

    不会证明,粘题解吧

    证明1: 

    对于给出的素数p,
    首先要明确一点:p的元根必然是存在的(这一点已由Euler证明,此处不再赘述),因此,不妨设其中的一个元根是a0(1<=a0<=p-1)
    按照题目的定义,a0^i(1<=i<=p-1) mod p的值是各不相同的,再由p是素数,联系Fermat小定理可知:q^(p-1) mod p=1;(1<=q<=p-1)(这个在下面有用)
    下面证明,如果b是p的一个异于a的元根,不妨令b与a0^t关于p同余,那么必然有gcd(t,p-1)=1,亦即t与p-1互质;反之亦然;
    证明:
    若d=gcd(t,p-1)>1,令t=k1*d,p-1=k2*d,则由Fermat可知
    (a0^(k1*d))^k2 mod p=(a0^(k2*d))^(k1) mod p=(a0^(p-1))^(k1) mod p=1
    再由b=a0^t (mod p),结合上面的式子可知:
    (a0^(k1*d))^k2 mod n=b^k2 mod p=1;
    然而b^0 mod p=1,所以b^0=b^k2 (mod p),所以b^i mod p的循环节=k2<p-1,因此这样的b不是元根;
     
    再证,若d=gcd(t,p-1)=1,即t与p-1互质,那么b必然是元根;
    否则假设存在1<=j<i<=p-1,使得b^j=b^i (mod p),即a0^(j*t)=a0^(i*t) (mod p),由a0是元根,即a0的循环节长度是(p-1)可知,(p-1) | (i*t-j*t)->(p-1) | t*(i-j),由于p与
    t互质,所以(p-1) | (i-j),但是根据假设,0<i-j<p-1,得出矛盾,结论得证;
    
    由上面的两个证明可知b=a0^t (mod p),是一个元根的充要条件是t与p-1互质,所有的这些t的总个数就是Phi(p-1);
    

    证明2:

    {xi%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {xi%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即为(p-1)的完全剩余系

    若x,x2...x(p-1)是(p-1)的完全剩余系,

    根据定理,可以推出若gcd(x, p-1) = 1时, (1,x,...,x(p-2))也是(p-1)的完全剩余系

    因为若xi != xj (mod p-1),那么x*xi != x*xj (mod p-1),与条件m矛盾,所以 xi = xj (mod p-1),

    由此可以确定答案为Phi(p-1)

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6601651.html
Copyright © 2011-2022 走看看