码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Miller_Rabbin算法判断大素数


    由费马小定理 a p − 1 ≡ 1 ( m o d    p ) a^{p-1}\equiv1(\mod p) ap−1≡1(modp),当 p p p为质数时成
    立。但当 p p p不为质数时该定理不一定成立。
    这里用二次探测去优化这个公式。
    大概内容若有 y 2 ≡ 1 ( m o d    p ) y^2\equiv 1(\mod p) y2≡1(modp)其中 p p p为质数, y < p y

    y<p
    则有 y = 1 y=1 y=1或 y = p − 1 y=p-1 y=p−1
    令 k = p − 1 = 2 m ∗ n k=p-1=2^m*n k=p−1=2m∗n
    则 ( a n ) 2 m ≡ 1 ( m o d    p ) (a^{n})^{2^m}\equiv 1(\mod p) (an)2m≡1(modp)
    随机一个数 x x x去模拟公式中的 a a a。若 ( a n ) ( . . . ) % p (a^n)^{(...)}\%p (an)(...)%p不为1或者
    ( a n ) u % p = 1 , ( a n ) ( u + 1 ) % p = p − 1 (a^n)^u\%p=1,(a^n)^{(u+1)}\%p=p-1 (an)u%p=1,(an)(u+1)%p=p−1则它一定不是质数。
    进行十次以上的探测可以很高的概率判断素数。

    using ll = long long ;
    ll mul(ll a,ll b,ll p){
        ll r = 0;
        while(b) {
            if(1&b) r = (r + a) % p;
            a = (a + a) % p;
            b >>= 1;
        }
        return r;
    }
    ll mi(ll a, ll b, ll p){
        ll r = 1;
        while(b) {
            if(1&b) r = mul(r, a, p);
            a = mul(a, a, p);
            b >>= 1;
        }
        return r;
    }
    mt19937 rnd(time(NULL));
    bool check(ll n){
        if(n == 1)return false;
        if(n == 2 || n == 3)return true;
        if(n + 1 & 1)return false;
        ll k = n - 1;
        int r = 0;
        while(k + 1 & 1) {
            k >>= 1;
            r ++;
        }
        ll res, la = 0;
        int cnt = 1;
        while(cnt--) {
            res = rnd() % (n - 1) + 1;
            res = mi(res, k, n);
            if(res == 1) continue;
            la = res;
            for(int i = 0; i < r; i++) {
                assert(res >= 0 && res < n);
                res = mul(res, res, n);
                if(res == 1){
                    if(la != n - 1) return false;
                    break;
                }
                la = res ;
            }
            if(res != 1)return false;
        }
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    elasticsearch 映射
    呜呜呜呜呜呜呜呜呜
    面试官:你先回去等通知吧!这个 Java 岗位我还有机会吗?
    使用命令行cli脚手架创建uniapp项目(微信小程序、H5、APP)
    联想小新如果使用蓝牙鼠标在关闭了触摸板的情况下不小心关掉了蓝牙该如何处理?
    机器学习之文本挖掘—基于R语言
    传统项目管理与敏捷项目管理
    Jsonp跨域的坑,关于jsonp你真的了解吗
    体验版小程序访问不到后端接口请求失败问题解决方案
    htb-sense
  • 原文地址:https://blog.csdn.net/ftrghujhgf/article/details/126850420
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号