关于求原根的方法及其证明

时隔两三个月重新打$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$。

上一篇:整数的可除性


下一篇:题解 洛谷P2158 【[SDOI2008]仪仗队】