码迷,mamicode.com
首页 > 其他好文 > 详细

求素数p的原根

时间:2018-12-06 14:37:49      阅读:409      评论:0      收藏:0      [点我收藏+]

标签:amp   col   cto   span   test   roo   code   暴力   原根   

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的原根

标签:amp   col   cto   span   test   roo   code   暴力   原根   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!