原根板子
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;
}

浙公网安备 33010602011771号