$ 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 $ 所需要的一些算法:(快速幂) (快速乘)

随机推荐

  1. Java之JSON操作(gson)

    使用gson包操作JSON数据. 依赖包:gson-2.8.2.jar <dependency> <groupId>com.google.code.gson</group ...

  2. js脚本 将本地图片路径转换为html

    公司业务类似于电商, 因此有很多纯图片展示的商品详情页, 类似淘宝店商品页面下的多个图片组成的商品详情页, 页面很简单, 就是一大串img标签, 但是每次做详情页都要配合emmet一顿操作( 如下图 ...

  3. 一点点linux系统的学习心得

    我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...

  4. Spark_RDD之RDD基础

    1.什么是RDD RDD(resilient distributed dataset)弹性分布式数据集,每一个RDD都被分为多个分区,分布在集群的不同节点上. 2.RDD的操作 Spark对于数据的操 ...

  5. Apache访问控制

    简单概述 httpd服务的访问控制 作用: 控制对网站资源的访问 为特定的网站目录添加访问授权 常用访问控制方式: 客户机地址限制 用户授权限制 1.基于客户端地址的访问控制 Order配置项,定义控 ...

  6. spring cloud 入门系列一:初识spring cloud

    最近看到微服务很火,也是未来的趋势, 所以就去学习下,在dubbo和spring cloud之间我选择了从spring cloud,主要有如下几种原因: dubbo主要专注于微服务中的一个环节--服务 ...

  7. LOJ #2540. 「PKUWC 2018」随机算法(概率dp)

    题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...

  8. Python爬虫:HTTP协议、Requests库

    HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...

  9. 【BZOJ3456】城市规划(生成函数,多项式运算)

    [BZOJ3456]城市规划(生成函数,多项式运算) 题面 求\(n\)个点的无向连通图个数. \(n<=130000\) 题解 \(n\)个点的无向图的个数\(g(n)=2^{C_n^2}\) ...

  10. 【BZOJ4822】[CQOI2017]老C的任务(扫描线)

    [BZOJ4822][CQOI2017]老C的任务(扫描线) 题面 BZOJ 洛谷 题解 没有修改操作,都不需要分治了... 直接排序之后扫描线算贡献就好了... 不知道为啥洛谷上过不了... #in ...