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;
}
posted @ 2021-02-24 16:07  zimindaada  阅读(84)  评论(0编辑  收藏  举报