求素數p的原根
阿新 • • 發佈:2018-12-06
color push oot tmp mit != nbsp code return
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(longlong 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的原根