Miller-Rabin快速素性判断

利用 二次探测定理和 费马小定理
二次探测定理:
x21(modp) p 是奇素数
当且仅当 x1 或者 x1
我们结合费马小定理,对于将要检验的数 p ,使用一个底数 a
ap11(modp) 则一定不是质数
p1=2t×u,我们取 b=at
对其进行 t 次二次探测检验,再将最后的结果进行 Fermat 素性测试
2,3,5,7 四个底数已经可以在 1012 内实现确定性素性测试
2,....37 可以在 278 内确定性判素

点击查看代码
ll qpow(ll a, ll p, ll mod) {
    ll base = 1;
    for(; p; p >>= 1, a = mul(a, a, mod)) 
        if(p & 1) base = mul(base, a, mod);
    return base % mod;
}
ll Test[10] = {2, 3, 5, 7, 11, 13, 17};
bool Query(ll P) {
    if(P == 1) return 0;
    ll t = P - 1, k = 0;
    while(!(t & 1)) k++, t >>= 1;
    for(int i = 0; i < 4; i++) {
        if(P == Test[i]) return 1;
        // Test[i] = rr(1, P-2);
        ll a = qpow(Test[i], t, P), nxt = a;
        for(int j = 1; j <= k; j++) {
            nxt = mul(a, a, P);
            if(nxt == 1 && a != 1 && a != P - 1) return 0;
            a = nxt;
        }
        if(a != 1) return 0;
    }
    return 1;
}

作者:cdsidi

出处:https://www.cnblogs.com/cdsidi/p/16760148.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CDsidi  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题