ZTL — 数学 — 数论 — Miller-Rabin判质数算法
复杂度:期望 \(O(\text{MR_TIME} \times n ^ {\frac{1}{4}})\), 当 MR_TIME
越大越正确
const int MR_TIME = 20;
bool Miller_Rabin(ll x){
if(x == 1) return 0;
if(x == 2) return 1;
if(!(x & 1)) return 0;
ll n = x-1;
while(!(x&1)) n >>= 1;
ll sto = n;
for(int i = 1; i <= MR_TIME; ++i){
n = sto; bool flag = 0;
ll m = ksm(rand() % (x-2) + 2, n, x);
if(m == 1) continue;
else{
for(; 0 <= n && n < x; n <<= 1, m = m*m%x) {
if(m == x-1) goto yep;
}
}
return 0;
yep:;
}
return 1;
}