原根的一些理解与题目

原根的一些理解与题目_第1张图片
下面给出求模素数p的原根的代码: (按照上面说的敲就是了)
Code

int f[30];
//求一个质数的原根  复杂度O(m*log(P-1)), m表示p-1的质因子个数.
ll qpow(ll x,ll y,ll m)
{
    ll res = 1;
    while(y){
        if(y&1) res = res*x%m;
        x = x*x%m;
        y >>= 1;
    }
    return res;
}


void solve()
{
    int n;
    while(~scanf("%d",&n)){
        int u = n-1;
        int k =0;
        for(int i=2;i*i<=u;i++){
            if(u % i == 0){
                while(u % i ==0){
                    u /= i;
                }
                f[k++] = i;
            }
        }
        if(u!=1) f[k++] = u;
        u = n-1;
        for(int i=2;iint flag = 0;
            for(int j=0;jif(qpow(i,u/f[j],n)%n == 1) {
                    flag |= 1;
                    break;
                }
            }
            if(!flag) printf("%d\n",i);
        }
    }
}

你可能感兴趣的:(原根/莫比乌斯学习)