先定义阶的概念:如果$gcd(a,p)==1$,那么对于方程$a^r equiv 1 (mod p)$来说,首先根据欧拉定理$ a^{phi(p)}equiv 1 (mod p) $,解一定存在所以$ rleq phi(p) $,最小的$r$称为$a$关于$p$的阶,记作$ ord_p(a) $
定义原根概念:一个模$ p $意义下的$ 0->p-1 $次幂各不相同,取遍$ [0,p-1] $,也就是说$ ord_p(g)=phi(p) $。
先说一下什么样的数具有原根。
结论是:对于奇质数$ p $,有原根的数是:$ 2,4,p^e,2p^e $证明比较麻烦,$Niven$和$Zuckerman$证明,略去过程。
因为最小原根一般都比较小,所以可以直接枚举出来,而这种方法有时候就显得过于慢。
怎么更快。
有一个结论可以用:对于一个有原根的数$p$,如果$g$的$phi(p)$的所有因子次方在$mod p$条件下均不为1,那么$g$是$p$的原根。
证明:首先结论可以转化为,如果对于任意的$b|phi(p)$,均不满足$ g^b equiv 1 (mod p)$那么,对于任意的$1leq bleqphi(p)-1$ ($b$不满足$b|phi(p)$),均不满足$g^b equiv 1 (mod p)$。
反证:
假设存在一个$b$,($b$不满足$b|phi(p)$),满足$g^b equiv 1 (mod p)$,设其中小的为$c$,那么$g^cequiv 1 (mod p)$成立。
令$d=phi(p)-c,d>=c$
根据欧拉定理。
$ g^d equiv g^{phi(p)-c} equiv g^{-c} equiv 1 (mod p) $
引理:$c|d$不成立。
反证:假设成立。
令$d=kc$
那么:$phi(p)=d+c=(k+1)c$
不满足$c|phi(p)$。
所以假设不成立。
引理$c|d$不成立得证。
那么$gcd(c,d)leq c$
因为:
$g^c equiv 1 (mod p)$
$g^d equiv 1 (mod p)$
那么:
$g^{c-d} equiv 1 (mod p)$
模拟更相损益术重复相减得到最终的$gcd$的过程,发现最终结果是:
$ g^{gcd(d,c-d)} equiv g^{gcd(c,d)} equiv 1 (mod p) $;
因为$gcd(c,d)<c$与假设的$c$是最小的$b$不成立。
所以假设不成立。
证毕。
所以用这种方式可以较快的验证原根。
int primert(int p,int phi) { int d=0; for(int i=2;1LL*i*i<=phi;i++) if(phi%i==0) dp[++d]=i,dp[++d]=phi/i; for(int i=2;;i++) { int j; for(j=1;j<=d;j++) if(qw(i,dp[j],p)==1) break; if(j==d+1) return i; } return 0; }
关于离散对数,也称作指标。
定义概念:如果$g$是$p$的一个原根,那么对于方程$g^x equiv a(mod p)$的解$x$,称$x$为对模$p$到基$g$上的$a$的一个离散对数或指标。记作$ind_{p,g}(a)$
离散对数定理:当且仅当$x equiv y (mod phi(p))$成立时,$ g^x equiv g^y (mod phi(p)) $成立。
(当且仅当和充分必要是等价表述)
先证必要性:因为$g$的各个次幂在$mod p$条件下各不相同,而以$phi(p)$为循环节,那么也就是说在每个长度为$phi(p)$的循环节中都存在某一个值和之前的循环节中的某个值相同,如果$x$和$y$在$mod phi(p)$条件下不同余,他们就不可能的到相同的同余于$p$的g的次方的答案。
再证充分性:
假设$x equiv y(mod phi(p))$成立。
那么:
$ g^x equiv g^{y+k phi(p)} $ $(mod p) $
$ equiv g^y (g^{phi(p)})$ $(mod p)$
$ equiv g^y 1^k $ $(mod p)$
$ equiv g^y $ $(mod p)$
导出结论,证明充分。
这是离散对数定理。
写一下推论。
$x^A equiv B (mod p) Leftrightarrow Aind_{p,g}(x) equiv ind{p,g}(B) (mod p)$
于是我们成功的把高次同余方程等价转化为了线性同余方程,而离散对数可以用$BSGS$算法求得。