$Miller Rabin$总结
$ Miller Rabin $ 总结:
这是一个很高效的判断质数的方法,可以在用 $ O(logn) $ 的复杂度快速判断一个数是否是质数。它运用了费马小定理和二次探测定理这两个筛质数效率极高的方法。
费马小定理判质数:
$ a^{p-1}\equiv1\mod p $
这个定理在p为质数的时候是成立的,所以我们可以如果要判断p是否是质数,可以 $ rand $ 几个a值然后照着这个式子来算,如果算出来不是1那说明p一定不是质数。
但在我们的自然数中,如果照着这个式子算出来的答案为1,也是有可能不是质数的。更有一类合数,它用费马小定理不管 $ rand $ 什么数都判不掉。这类合数称为Carmichael数,其中一个例子就是561(哇,居然这么小)。
二次探测定理:
因为Carmichael数的存在,使得我们难以高效判断质数,所以我们还需要加入第二种判断方法使这种伪算法更优秀!而二次探测无疑就是为我们量身定制的算法,因为它要建立在同余式右边为1的基础上(而我们的费马小定理不正好满足了要求吗?)
若 $ b^2\equiv1\mod p $ 且 $ p $ 为质数 $ => $ 则 $ p $ 一定可以被 $ b-1 $ 和 $ b+1 $ 其中一个整除
这是二次探测定理,原理很简单,我们将上面的同余式左右都减1,根据平方差公式可以得出 $ (b-1)(b+1)\equiv0\mod p $ 这其实就代表着等式左边是模数的倍数,但若模数p是质数,则 $ (b-1) $ 和 $ (b+1) $ 必定存在一个是p的倍数,所以要么 $ b-1=p\quad(b=1) $ 或者 $ b+1=p\quad(b=p-1) $ 如果不满足则p一定不是质数!然后我们还可以发现若 $ b=1 $ 我们又可以进行新一轮二次探测!
根据这个道理,我们可以进行二次探测:因为 $ a^{p-1}\equiv1\mod p $ 如果 $ p-1 $ 为偶数的话就可以化成: $ a{(\frac{p-1}{2}){2}}\equiv1\mod p $ 这样就变成了二次探测的基本式。
inline ll ksc(ull x,ull y,ll p){//O(1)快速乘(防爆long long)
return (x*y-(ull)((lb)x/p*y)*p+p)%p;
}
inline ll ksm(ll x,ll y,ll p){//快速幂
ll res=1;
while(y){
if(y&1)res=ksc(res,x,p);
x=ksc(x,x,p); y>>=1;
}return res;
}
inline bool mr(ll x,ll p){
if(ksm(x,p-1,p)!=1)return 0;//费马小定理
ll y=p-1,z;
while(!(y&1)){//一定要是能化成平方的形式
y>>=1; z=ksm(x,y,p);//计算
if(z!=1&&z!=p-1)return 0;//不是质数
if(z==p-1)return 1;//一定要为1,才能继续二次探测
}return 1;
}
inline bool prime(ll x){ if(x<2)return 0;
if(x==2||x==3||x==5||x==7||x==43) return 1;
return mr(2,x)&&mr(3,x)&&mr(5,x)&&mr(7,x)&&mr(43,x);
}
这样子加上二次探测之后,明显就能高效很多,基本上卡不了,大概要每 $ 10^{10} $ 个数才会出现一个判不掉的,这个概率可以说十分微小,可以忽略!
$ Miller Rabin $ 所需要的一些算法:(快速幂) (快速乘)
随机推荐
- 如何取消浏览器护眼色 Lodop打印图片有窗口颜色的边框
Lodop打印图片出现了边框,然而通常情况下是没有边框的,由于Lodop是基于本机的ie进行解析的,和IE的设置有关.用户的电脑和习惯千差万别,有人喜欢给浏览器加上护眼色,而这一个行为可能导致Lodo ...
- vue实现带规格商品的表格编辑
实现效果: 需求分析: 商品分为 启用规格 和 未启用规格 两种状态, 启用时显示带规格表格, 不启用时显示无规格价格 规格大项最多添加两个, 比如 "颜色", "尺寸& ...
- 03 基于umi搭建React快速开发框架(封装列表增删改查)
前言 大家在做业务系统的时候,很多地方都是列表增删改查,做这些功能占据了大家很长时间,如果我们有类似的业务,半个小时就能做出一套那是不是很爽呢. 这样我们就可以有更多的时间学习一些新的东西.我们这套框 ...
- Quartz.Net—MisFire
什么是misfire misfire就是哑火,就是trigger没有得到正常的触发. 1.所有的threadpool都在工作,而且工作时间很长,导致trigger没有threadpool去执行. 2. ...
- DOM 操作技术【JavaScript高级程序设计第三版】
很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...
- Code First 重复外键
原因:在一个表中,我有如下字段 表名:orderInfo 列名:companySend,companyReceiver 先展示表结构,(手打了,见谅) public class OrderInfo { ...
- Dapper 连表查询
实体类: UserInfo: public partial class UserInfo { public UserInfo() { this.Persion = new HashSet<Per ...
- BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】
题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是O(n^2)的,但是有一个1/20左右的常数, ...
- MT【41】利用不等式妙消参数
已知$\theta\in[0,2\pi]$对任意$x\in[0,1],2x^2sin\theta-4x(1-x)cos\theta+3(1-x)^2>0$恒成立.求$\theta$的范围. 解答 ...
- 14 Zabbix Item类型之Simple checks类型
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 14 Zabbix Item类型之Simple checks类型 Simple checks通常用 ...