首页 > 编程语言 >Miller Rabin算法判定质数(OI向)

Miller Rabin算法判定质数(OI向)

时间:2024-06-14 22:24:03浏览次数:21  
标签:OI Miller 质数 探测 算法 定理 Rabin

  前言:本篇不太适合那些对数学证明要求严格的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为整数)变成奇数不能使用二次探测定理即可(其本质依然是通过尝试举反例来判断,所以存在玄学性)

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

 

标签:OI,Miller,质数,探测,算法,定理,Rabin
From: https://www.cnblogs.com/tingzhimian/p/18248740

相关文章

  • android 播放视频
    播放视频文件新建一个activity_main.xml文件,文件中放置了3个按钮,分别用于控制视频的播放、暂停和重新播放。另外在按钮的下面又放置了一个VideoView,稍后的视频就将在这里显示。<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools......
  • # android studio启动虚拟机长时间无响应,无法启动
    问题虚拟设备长时间不响应,无法启动设备方案根据androidstudio启动虚拟器失败尝试删除锁文件失败,.android目录下不存在锁文件电脑内存或计算配置不足查看了模拟器需要的内存,我的电脑还有10GB,应该是绰绰有余模拟器版本不对重新下载了30版本的,依然不响应,真......
  • 数的计数(Noip2001)
    题目描述】我们要求找出具有下列性质数的个数(包括输入的自然数n)。先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:不作任何处理;在它的左边加上一个自然数,但该自然数不能超过原数的一半;加上数后,继续按此规则进行处理,直到不能再加自然数为止。【输入】自然......
  • [NeurIPS2021]Open-set Label Noise Can Improve Robustness Against Inherent Label
    这篇文章与ICML2022的Open-sampling是同一个作者,方法一模一样,只是问题的场景变为噪声标签学习,Open-sampling是长尾问题的场景,可参见写的这篇blog。这两篇文章大致做法完全相同:对biased数据集引入开集数据,在每个epoch分配均匀的闭集标签。如果是longtaileddata,还涉及不平衡问题,......
  • P1095 [NOIP2007 普及组] 守望者的逃离
    [NOIP2007普及组]守望者的逃离题目背景NOIP2007普及组T3题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉......
  • Android中EventBus简单使用
    综述消息总线又叫事件总线,被广泛的应用于各类项目之中.但是此处只概述Android体系中用到的框架.为什么项目会需要一个消息总线呢?一句话概括,在大多数常见项目中,随着项目变大,项目可能出现大量的跨页面,跨组件,跨线程,跨进程来传递消息与数据的需求.为了更方便的直......
  • CAS单点登录:开启OIDC协议(八)
    1.引入依赖<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-oidc</artifactId><version>${cas.version}</version></dependency>2.生成jwks官方提供的用于生产JWK文件工具:https://mkjwk.org/复制......
  • 车载android开发 carservice(一)
    车载android开发carservice是什么?车载Android开发中的CarService是一个专门为汽车环境设计的系统服务。CarService通常是AndroidAutomotiveOS的一部分,提供一系列API和框架,允许开发人员构建与汽车相关的应用和服务。以下是CarService的一些主要功能和作用:车辆数据访问:C......
  • java oracle easypoi 百万数据导出
    privatestaticfinalIntegerpageSize=100000;/***zcc*@paramfixmedinsCode*@paramtitle*@paramsheetName*/publicvoidexportAudtMorethanVo(StringfixmedinsCode,Stringtitle,StringsheetName){StringfilePa......
  • 04《android studio开发实战(第三版)》第七到十章阅读笔记
    第七章:持久化存储本章介绍了SharedPreferences的使用方法,它是一种轻量级的存储方案,用于保存简单的键值对数据,如用户设置和配置。 学习了如何创建SharedPreferences对象,使用getSharedPreferences()方法读取和写入数据,以及如何使用apply()和commit()提交修改。了解了如何在Andro......