原根板子

int rt(int m) {
    REP(i,2,m) {
        int x=m-1, ok=1, mx = sqrt(m);
        REP(k,2,mx) if (x%k==0) {
            if (qpow(i,(m-1)/k,m)==1) {ok=0;break;}
            while (x%k==0) x/=k;
        }
        if (ok&&(x==1||qpow(i,(m-1)/x,m)>1)) return i;
    }
    throw;
}

 

posted @ 2019-09-19 16:52  uid001  阅读(136)  评论(0编辑  收藏  举报