前言:本篇不太适合那些对数学证明要求严格的Oier,然后本人也是蒟蒻,主要写给自己回顾用的

  Miller Rabin算法能快速的判断一个数是否为质数,作为一个数学算法它具有一定的玄学成分,但是在OI中通过一些手段可以使其达到100%正确。

  先让我们对比一下一般算法书教的2种关于质数的算法:

  1,试除法,相比Miller Rabin它就是不够快,但是试除法的过程有很多好处,例如求其约数,这是Miller Rabin无法比拟的

   2,欧拉筛 ,求区间内质数,不是一条赛道的

  先看复杂度:O(klog3n)

  让我们开始吧!

  首先我们明确Miller Rabin算法的原理,或者前置知识:费马小定理&二次探测定理

   费马小定理:ap-1 Ξ 1 (mod p)大家应该不陌生,大部分算法书数学专题都有,而且今年(2024) 的九省联考压轴题也火了一把,没学过的先出门学下,费马小定理主要就用在本算法以及求逆元(同余相关)

  二次探测定理我们好好介绍下:

  对于一个质数p,若x2 Ξ 1 (mod p),则小于p的解有且仅有x = 1 或 x =  p - 1

  为什么呢?(如下图,本人新手写博客  ,不太会数学公式,有点模糊将两4, 不过以后的我看应该没什么问题)

  注意上述等式全是在mod p意义上的

  以上知识在我如今看来是显然的,对于初学者的我当时却理解了一下午。。。所以各位加油

  好,接下来让我们理一下思路

  由费马小定理容易猜想如果,任取一组小于p的数为a,满足费马小定理形式p会是质数吗?

  其实吧,我觉得大家学到这了应该容易想到不会的,我不作详细证明。举个反例561,显然这是3的倍数,但是你去按上文取数发现全都符合哦,我们把这些反例成为卡迈尔数

  这个时候我们就要联系二次探测定理了,我们思考若p是个质数p - 1是不是个偶数啊,显然是(若p - 1 不是偶数,则为奇数对吧,则p为偶数,则一个偶数是质数,除了2都不满足啊,所以我们特判2然后把它当结论)

  所以费马小定理可以表示成二次探测定理的形式:

        

  然后就用到数学算法常用的分治了,如果,则我们把作为x2继续表示成二次探测定理的形式判断直到( p - 1) /2k(k为整数)变成奇数不能使用二次探测定理即可(其本质依然是通过尝试举反例来判断,所以存在玄学性)

  综上,我们认为不违背二次探测定理的数即为质数,什么叫不违背? 后文和代码下次补,该睡觉了

Miller Rabin算法判定质数(OI向)的更多相关文章

  1. 【数论基础】素数判定和Miller Rabin算法

    判断正整数p是否是素数 方法一 朴素的判定   

  2. Miller Rabin 算法简介

    0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...

  3. Miller Rabin算法详解

    何为Miller Rabin算法 首先看一下度娘的解释(如果你懒得读直接跳过就可以反正也没啥乱用:joy:) Miller-Rabin算法是目前主流的基于概率的素数测试算法,在构建密码安全体系中占有重 ...

  4. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  5. Miller Rabin算法学习笔记

    定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且只要你脸不黑以及常数不要巨大一般来讲都比\(O(\sqrt n)\)的朴素做法更快. 定理: Miller ...

  6. (Miller Rabin算法)判断一个数是否为素数

    1.约定 x%y为x取模y,即x除以y所得的余数,当x<y时,x%y=x,所有取模的运算对象都为整数. x^y表示x的y次方.乘方运算的优先级高于乘除和取模,加减的优先级最低. 见到x^y/z这 ...

  7. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

  8. 关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)

    关于素数的基本介绍请参考百度百科here和维基百科here的介绍 首先介绍几条关于素数的基本定理: 定理1:如果n不是素数,则n至少有一个( 1, sqrt(n) ]范围内的的因子 定理2:如果n不是 ...

  9. HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...

  10. 与数论的厮守01:素数的测试——Miller Rabin

    看一个数是否为质数,我们通常会用那个O(√N)的算法来做,那个算法叫试除法.然而当这个数非常大的时候,这个高增长率的时间复杂度就不够这个数跑了. 为了解决这个问题,我们先来看看费马小定理:若n为素数, ...

随机推荐

  1. Excel批量插入checkbox的宏代码

    来源网络,作为个人记录使用 手动在excel中添加勾选框不复杂,但是添加多个的时候会很麻烦,特别是在做数据分析时,选择框属性应该绑定在对应单元格下,使用普通的填充方式无法到达要求,因此使用VBA宏命令 ...

  2. python3验证手机号码

    import redef check_phone_right(self, phone_number): """检测号码是否正确""" pho ...

  3. Spring 注解之 @MapperScan 和 @Mapper

    @Mapper注解 为了让别的类能够引用UserMapper,需要在UserMapper类上添加@Mapper注解: @Mapper public interface UserMapper { pub ...

  4. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-17- 如何优雅地切换浏览器多窗口(详细教程)

    1.简介 有时候我们在网页上点击一些按钮或超链接时,有时会打开一个新的网页窗口.这个时候如果下一步操作是在新的网页窗口上,那么就需要切换网页窗口,切换到新的网页窗口后再执行元素定位等操作.Playwr ...

  5. kubernetes集群实用操作

    一.查看日志 说明:输出Pod中一个容器的日志信息,如果pod只包含一个容器则可以省略容器名. kubectl logs [-f] [-p] POD [-c CONTAINER] 举例说明 # 返回包 ...

  6. 记录一次OPENCV安装的排坑之路

    1.首先从opencv官网上下载 2.下载之后可以得到opencv的源代码文件,解压后是这个样子 3.下载cmake 选择Installer安装,安装完了就会看见这个玩意 4.下载opencv con ...

  7. git-intelligence-message 1.3.2 发布了,智能生成、提交git的工具

    git-intelligence-message 1.3.2 发布了,这是一次小版本更新.主要内容是可以通过命令查看AI配置信息了. Git Intelligence Message (GIM) 是一 ...

  8. 干货大分享!带你了解数栈批流统一的高效数据同步插件—FlinkX

    一.什么是FlinkX FlinkX是一款基于Flink的分布式离线/实时数据同步插件,可实现多种异构数据源高效的数据同步,其由袋鼠云于2016年初步研发完成,目前有稳定的研发团队持续维护,已在Git ...

  9. EasyMR 安全架构揭秘:如何管理 Hadoop 数据安全

    2017年,美国信用评级机构 Equifax 遭受黑客攻击,导致1.4亿个人的敏感信息泄露: 2020年,发生了 SolarWinds 公司的软件供应链遭受恶意代码攻击事件,涉及多个行业和国家: 20 ...

  10. uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步

    UTS 插件鸿蒙端开发示例 以上示例已开源 项目地址 请参考 示例代码. 前言 虽然这个 UTS 插件鸿蒙端的示例看起来很简单,但说实话,这一步其实难住了不少开发者.很多人第一次做 UTS 插件,尤其 ...