首页 > 其他 > 详细

求素数p的原根

时间:2018-12-06 13:06:02      阅读:406      评论:0      收藏:0      [点我收藏+]
vector<long long >a;
template<class T> T fast_mod(T a,T b,T Mod){
    if(b==0) return 1;
    T ans=1,base=a;
    while(b!=0){
        if(b&1)ans=(ans*base)%Mod;
        base=(base*base)%Mod;
        b>>=1;
    }
    return ans;
}
//求mod p意义下的原根 p为素数
//采用暴力求解,一个一个试p-1的因子即可
bool g_test(long long g,long long p){
    for(long long i=0;i<a.size();i++)
    if(fast_mod(g,(p-1)/a[i],p)==1) return ;
    return 1;
}
long long primitive_root(long long p){
    long long tmp=p-1;
    for(long long i=2;i<=tmp/i;i++)
    if(tmp%i==0) {
        a.push_back(i);
        while(tmp%i==0) 
        tmp/=i;
    }
    if(tmp!=1) a.push_back(tmp);
    long long g=1;
    while(1){
        if(g_test(g,p)) return g;
        g++;
    }
}

 

求素数p的原根

原文:https://www.cnblogs.com/033000-/p/10075754.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!