原根的求解证明 附代码

求解方法:

枚举
从2开始枚举,然后暴力判断g^(P-1) = 1 (mod P)是否当且当指数为P-1的时候第一次成立
而由于原根一般都不大大多都在200以内,所以可以暴力得到.

方法
例如求任何一个质数x的任何一个原根,一般就是枚举2到x-1,并检验。有一个方便的方法就是,求出x-1所有不同的质因子p1,p2…pm,对于任何2<=a<=x-1,判定a是否为x的原根,只需要检验a^((x-1)/p1),a^((x-1)/p2),…a^((x-1)/pm)这m个数中,是否存在一个数mod x为1,若存在,a不是x的原根,否则就是x的原根。
原来的复杂度是O(P-1),现在变成O(m)*log(P-1)m为x-1质因子的个数。质因子的个数也是log级别的。

证明
若存在,那么显然不是原根。
否则,假设存在一个最小的t < phi(x)=x-1使得a^t = 1 (mod x)
那么t一定整除于x-1。
为什么呢?我们假设t不整除于x-1,那么因为t < x-1,所以一定能得到一组k,p,使得x-1 = k * t+p。因为a^t = 1 (mod x),所以a^(k * t) = 1 (mod x),又因为a^(x-1) = 1 (mod x),所以a^p = 1 (mod x),而p < t 所以t不是最小的,矛盾。
所以那么t一定整除于x-1。所以我们只需要判断x-1的所有因数就行了。我们考虑,t一定是比x-1少一些质因子。而如果a

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值