Miller-rabin判素数
用Miller-rabin判素数之前,先要知道一个叫费马小定理的东西。
费马小定理:如果p是质数,那么任意和p互质的数的p-1次方对p取模都等于一。
即:任意gcd(a,p)==1,那么a^(p-1)≡1(mod p)
既然我们用费马小定理又得到了一个新的质数的性质,那么我们就可以用这个性质来判定素数。
为了判定p是不是质数,我们随机检验一些a检验a^(p-1)mod p是否为1
但是这样判定一个素数并不是百分百正确的,有一些数不是素数,但依据费马小定理还是会判定成素数。
例如:p=561=3*11*17,无论如何取a,都满足费马小定理的素数性质。
于是我们就需要利用二次探测的思想:
p是质数,则x^2≡1(mod p)仅有两个解,x1=1,x2=p-1(很显然,(p-1)^2=p^2-2p+1),我们这样计算a^(p-1):
1.我们令p-1=2^s * t(因为p是质数,p-1一定是偶数,偶数一定可以表示成2^s * t)
2.然后我们来分解2^s * t,设x0=a^t,xi=x(i-1)^2,最后我们可以得到xs=a^(p-1)(等比数列)
3.如果|xi|!=1,且x(i+1)=1,那么p显然不是质数(因为该方程只有两个解,如果出现这种情况就是有另解,为合数)。
上面介绍了算法原理,下面是算法流程:
1.按照上面的方法计算a^(p-1)(如果p不是质数,那么此时有可能直接返回)
2.检查a^(p-1)≡1(mod p)
3.当a是2~p-1的随机数时,如果p返回是合数,那他就是一定合数,如果返回是质数,则有一半的机会是质数
转载于:https://www.cnblogs.com/gshdyjz/p/7273745.html
Miller-rabin判素数相关推荐
- 梅森素数的判定(Lucas-Lehmer判定法 和 miller - Rabin 判定法)
Mp = 2^p-1 且 p是素数,称为梅森数,若Mp是素数则称为梅森素数. Lucas-Lehmer判定法 判定一个数是否为梅森素数 效率足够高,如果题目特意为梅森素数设计,会卡复杂度,那么套用此方 ...
- miller——rabin判断素数
我们首先看这样一个很简单的问题:判定正整数\(n\)是否为素数 最简单的做法就是枚举\(2\)到\(n\)的所有数,看是否有数是\(n\)的因数,时间复杂度\(O(n)\) 稍微优化一下发现只要枚举\ ...
- Magic的Miller Rabin素数测定和Pollard's Rho质因子分解法
boshi大佬帮助了litble,使愚蠢的litble(可能?)学会了这种神奇的算法. orz boshi. 例题:poj1811 Miller Rabin 又称米勒挝饼, 一种神奇的快速判定一个数是 ...
- 素数判定质因数分解(数论)(Miller Rabin)(Pollard Rho)
太玄学了! 我真的被概率的魅力折服了.此前我认为1便是1,0.9999999999-便是0.9999999999-. 但实际上它们有着千丝万缕的关系. 试想,如果一件事发生的概率是0.99999999 ...
- 素数判定算法 MILLER RABIN
入门级筛素数--试除法,复杂度O(n^2) bool rmprime( long long n ) {for(long long i = 2; i <= sqrt(n) ; i++) if(n% ...
- (Miller Rabin算法)判断一个数是否为素数
(Miller Rabin算法)判断一个数是否为素数 1.约定 x%y为x取模y,即x除以y所得的余数,当x<y时,x%y=x,所有取模的运算对象都为整数. x^y表示x的y次方.乘方运算的优先 ...
- 与数论的厮守01:素数的测试——Miller Rabin
看一个数是否为质数,我们通常会用那个O(√N)的算法来做,那个算法叫试除法.然而当这个数非常大的时候,这个高增长率的时间复杂度就不够这个数跑了. 为了解决这个问题,我们先来看看费马小定理:若n为素数, ...
- C++Miller Rabin算法的实现(附完整源码)
C++Miller Rabin算法的实现算法 C++Miller Rabin算法的实现算法完整源码(定义,实现,main函数测试) C++Miller Rabin算法的实现算法完整源码(定义,实现,m ...
- 写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息
写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息(C语言) 题目要求:如标题 思路: 需要判断n是否为素数 可以定义i,使i从2开始循环到n-1,如果n能被i整除,即跳出循环 如果i等于 ...
- 习题 7.3 写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。
C程序设计(第四版) 谭浩强 习题7.3 个人设计 习题 7.3 写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息. 代码块: 方法1: #include <stdio.h> ...
最新文章
- 通过Shell开发企业级专业服务启动脚本案例(MySQL)
- python需要php吗-做网站用php还是python
- Python列表中字符串转数字的方法
- 指令集及流水线基本概念
- kodi android设置中文,Kodi(原XBMC)
- python web scraping
- Mysql中代替like模糊查询的一种方法
- 微软私有云解决方案_毕马威 AI 工厂携手微软云技术 | 共创人工智能发展,共建创新解决方案...
- 为什么mvc里面的ModelState.IsValid一只都是true
- 控制系统数字仿真与CAD-第三次实验-附完整代码
- python绘制玫瑰花代码视频_python turtle玫瑰花绘制效果和源代码
- GIS Experience (六):QGIS安装及使用教程
- Pix4D生成正射影像和DSM详细教程(可下载)
- 深入浅出WPF之我件2
- 计算机常识 和 应用技巧
- 单例模式及常用使用场景简析
- 75款响应式国外漂亮网站建设中模板(上线倒计时模板)
- unity3D地形编辑器—Terrain
- 算法设计7-数字迷问题
- 如何在TIA 博途 WinCC中组态WinCC Runtime Advanced 和 S7 控制器的PROFINET通信连接?
热门文章
- iOS开发之时区的获取,设置,创建
- SQLPro for SQLite for Mac(数据库管理软件)
- 动画交互原型设计:Principle for Mac
- Downie 4 for Mac(视频下载)
- After Effects报警最后日志消息是:<760504><SonyRawDecoder><5>
- mac连接windows远程桌面不能复制粘贴解决办法
- java.lang math 类
- 深入Session2
- unicode字符和多字节字符的相互转换接口
- centos最新版solr5.3.1安装和数据整理以及遇到的问题解答