51nod 1135 原根

2019-04-13 13:48发布

定义:,使得成立的最小的,称为对模的阶,记为
定理:如果模有原根,那么它一共有个原根。
定理:,则
定理:如果为素数,那么素数一定存在原根,并且模的原根的个数为
定理:是正整数,是整数,若的阶等于,则称为模的一个原根。
   假设一个数对于模来说是原根,那么的结果两两不同,且有,那么可以称为是模的一个原根,归根到底就是当且仅当指数为的时候成立。(这里是素数)
有原根的充要条件:,其中是奇素数。  
求模素数原根的方法:素因子分解,即的标准分解式,若恒有
          
成立,就是的原根。(对于合数求原根,只需把换成即可)


#include #include #include #include #include #include #include using namespace std; long long d[1000]; long long dp[1000]; int kuai(long long x,long long n,long long m) { long long i,j; long long s=1; for(i=0;;i++) { long long t=x; long long d=n%2;n=n/2; if(d==0) t=1; if(d!=0) { if(i==0) t=t*1%m; else { for(j=0;j>p) { long long k=p-1; long long i; long long x=1; d[0]=k; d[1]=1; if(k%2==0) { d[2]=2; while(k%2==0) k=k/2; } long long l=3; for(long long j=3;j<=k;j+=2) { if(k%j==0) { d[l]=j;l++; while(k%j==0) k=k/j; //cout<