[BZOJ2219] 数论之神 [原根&BSGS&原根&指标]

2019-04-14 16:44发布

class="markdown_views prism-kimbie-light">
[Linkfrak{Link}]

整数模 n 乘法群Zn_n 群中,根据定义 Zn=ϕ(n)|_n|=phi(n)
aa 关于 pp 的阶 δp(a)delta_p(a) 是满足 ax1(modp)a^xequiv1pmod{p} 的最小的 xx
也就是 <a>|<a>|
同时根据群论拉格朗日定理 G=[G:H]H|G|=[G:H]|H| 我们有 HG|H|||G|
(群论拉朗易得只需证等价,等价只需证自反对称传递)
那么 <a>ϕ(p)|<a>||phi(p) 并且 aG=1a^{|G|}=1
原根pp 的原根 gg 满足 δp(g)=ϕ(p)delta_p(g)=phi(p)
pp 的所有原根乘起来 1(modp)equiv1pmod{p}
pp 的所有原根加起来 μ(p1)(modp)equivmu(p-1)pmod{p}pp 的原根个数为 ϕ(ϕ(p))phi(phi(p)) 。(证明:Zp=ϕ(p)|_p|=phi(p) 并且生成元个数为 ϕ(Zp)phi(|_p|)
(好多地方都写的上面这个证明,但是我实在是没有找到关于 Zp_p 可逆元的说法。。)
(我感觉貌似意思是说原根能生成 Zp_p 然后利用所有原根能互相得到的性质?)
(接着把不能作为生成元的与 pp 互质的数 gxg^{x'} 去掉)
(然后能作为生成元的 xx 也就是应该满足 xx 的倍数模 ϕ(p)phi(p) 能取到所有的 xx
(这种 xxϕ(ϕ(p))phi(phi(p)) 个)
或者也可以利用 δp(gx)=δp(g)(x,δp(g))delta_p(g^x)=frac{delta_p(g)}{(x,delta_p(g))}δp(gx)=ϕ(g)(x,ϕ(g))delta_p(g^x)=frac{phi(g)}{(x,phi(g))}gother=gxg_{other}=g^x
δp(gx)=ϕ(p)delta_p(g^x)=phi(p) 的时候 (x,ϕ(g))=1(x,phi(g))=1 即有 ϕ(ϕ(g))phi(phi(g))gxg^x 为原根。得证。
(如果 ggpp 的原根那么 gxg^xpp 的原根的充要条件为 (x,ϕ(p))=1(x,phi(p))=1 gg 是模 pp 的原根的充要条件为 gx(modp)g^xpmod{p}x=0,1,,δp(g)x=0,1,cdots,delta_p(g) 两两不相等。
也就是 gx1(modp)g^{x}equiv1pmod{p} 最小正整数解为 x=ϕ(p)x=phi(p) 有原根的数只有 1,2,4,pa,2pa1,2,4,p^a,2p^a ,其中 pp 是奇素数。
pp 有原根,意味着 Zp_p 是一个循环群。 求原根:唯一分解 ϕ(p)=piaiphi(p)=prod{p_i}^{a_i} , 暴枚 x[2,p)xin[2,p)
对每个 xx 判断 xϕ(p)pix^{frac{phi(p)}{p_i}}