先定義階的概念:如果$gcd(a,p)==1$,那么對於方程$a^r \equiv 1 (mod\ p)$來說,首先根據歐拉定理$ a^{\phi(p)}\equiv 1 (mod\ p) $,解一定存在所以$ r\leq \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)$那么,對於任意的$1\leq b\leq\phi(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^c\equiv 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$算法求得。