Miller_Rabin素数测试

    Miller_Rabin判断单个素数的方法运用了费马小定理,可以说非常之快了。

    Miller_Rabin曾经被称作“黑科技”,但是根据费马小定理其实完全可以自己写出来大半。

其算法的运行过程如下:

(1)对于奇数M,使得N=(2^r)*M+1

(2)选取随机数使得A<N

(3)对于任意i(i<r),若(A^(2^i)) Mod N=N - 1,则N为素数

(4)或者,若(A^M) Mod N=1,则N通过随机数A的测试

若对素数N进行T次测试,那么失误率为1/4^T,我们可以进一步提高其效率,如省去步骤3

   

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<time.h>
#include<cstdlib>
#include<cmath>
using namespace std;
long long exp(long long a,long long m,long long n){//快速幂
if(m==0) return 1;
if(m==1) return (a%n);
long long w=exp(a,m/2,n);
w=w*w%n;
if(m&1) w=w*a%n;
return w%n;
}
bool Witness(long long a,long long n)
{
long long m=n-1;//满足原先条件
int j=0;
while(!(m&1)){
j++;
m>>=1;
}
long long x=exp(a,m,n);
if(x==1||x==n-1) return false;
while(j--){
x=x*x%n;
if(x==n-1) return false;
}
return true;
}
bool Miller_Rabin(long long n){
if(n==2) return true;
if(n&1==0) return false;
for(int i=1;i<=10;i++){
long long a=rand()%(n-2)+2;//一定为a<N
if(Witness(a,n)) return false;
}
return true;
}
bool prime(long long N){
long long k=sqrt(N);
for(int i=2;i<=k;i++) if(N%i==0) return false;
return true;
}
int main(){
srand(time(NULL));
for(long long i=3;i<=10000000;i++)
if(Miller_Rabin(i)!=prime(i)) cout<<i<<endl;
}

  

【数论】Miller_Rabin的更多相关文章

  1. 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

    Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case ...

  2. 数学--数论--Miller_Rabin判断素数

    ACM常用模板合集 #include<iostream> #include<algorithm> #include<cstring> #include<cst ...

  3. 数学--数论--Miller_Rabin判断一个大数是不是素数(随机算法)

    前提知识 1,费马定理:ap−1=1(mod p)a^{p-1}=1(mod\ p)ap−1=1(mod p)

  4. ACM模板合集

    写在前面: 第一年小白拿铜牌,第二年队友出走,加上疫情原因不能回校训练导致心底防线彻底崩盘,于是选择退役. 自从退役之后,一直想我打了那么久的ACM,什么也没留下觉得很难受,突然想到我打ACM的时候, ...

  5. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  6. 数论ex

    数论ex 数学学得太差了补补知识点or复习 Miller-Rabin 和 Pollard Rho Miller-Rabin 前置知识: 费马小定理 \[ a^{p-1}\equiv 1\pmod p, ...

  7. [总结]数论和组合计数类数学相关(定理&证明&板子)

    0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...

  8. 洛谷P4358密钥破解 [CQOI2016] 数论

    正解:数论 解题报告: 先,放个传送门QwQ 这题难点可能在理解题意,,, 所以我先放个题意QAQ 大概就是说,给定一个整数N,可以被拆成两个质数的成绩p*q,然后给出了一个数e,求d满足e*d=1( ...

  9. 【BZOJ1041】圆上的整点(数论)

    [BZOJ1041]圆上的整点(数论) 题面 BZOJ 洛谷 题解 好神仙的题目啊. 安利一个视频,大概是第\(7\)到\(19\)分钟的样子 因为要质因数分解,所以复习了一下\(Pollard\_r ...

随机推荐

  1. Hibernate中主键生成策略

    主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增, 原理:select ma ...

  2. odoo XMLRPC 新库 OdooRPC 尝鲜

    无意中发现了python居然有了OdoRPC的库,惊喜之下赶紧尝试一番,比XMLRPC简洁了不少,机制看样子是利用的JsonRPC. #原文出自KevinKong的博客http://www.cnblo ...

  3. Centos 下安装 文泉驿 字体 Odoo

    刚装完centos下的odoo的字体 文泉驿 ,一万头草泥马呼啸而过.....劝君如非必要,千万别再centos下折腾odoo..... 正题,文泉驿官网 只提供 deb包和源码包的字体安装 ,想在c ...

  4. cmd 更改字体

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont,在右面找到936值双击打开,数 ...

  5. CSS重新认识(一)

    1. 所有的元素都遵循盒子模型,即内容部分+padding(填充部分)+border+margin(外边距部分); 2.我们平常定义的width与height指的内容部分的长宽; 3. 行内元素在不改 ...

  6. thinkphp多模板布局设置!!

    首先开启模板布局要在配置文件添加: 'LAYOUT_ON'=>true, 'LAYOUT_NAME'=>'layout', 如果需要设置多个布局模板,就要先关闭上面的LAYOUT_ON,也 ...

  7. JQuery 遍历子元素+ each函数的跳出+提取字符串中的数字

    最近脑袋迷糊的如同一团浆糊,一直出错. HTML代码如下图,现在想实现的功能是根据Ajax请求,获取到具体的button,以更新其样式.由于Button较多,每个Button都设置id,没有意义,想通 ...

  8. java抽象类和接口的区别

    抽象类特点:1.抽象类中可以构造方法2.抽象类中可以存在普通属性,方法,静态属性和方法.3.抽象类中可以存在抽象方法.4.如果一个类中有一个抽象方法,那么当前类一定是抽象类:抽象类中不一定有抽象方法. ...

  9. 利用logminer恢复delete误删除操作的数据

    1环境准备 日志挖掘可以基于日志.基于时间.基于SCN分析,这里我们将演示一个基于SCN的分析案例. 开启补充日志功能(必须开始,否则不能捕获DML操作日志): 创建一张livan表,往里面插入了14 ...

  10. jquery回车执行某个事件

    这里用到的是在查询框中输入数据后直接回车直接查询. //回车执行查询事件(执行class='btn-query'的单击事件) $(document).keydown(function (event) ...