博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法
阅读量:4364 次
发布时间:2019-06-07

本文共 1830 字,大约阅读时间需要 6 分钟。

 

米勒拉宾算法的基本概念如下:

首先判断这个数n的奇偶性

若为偶数仅有2是质数

奇数则进入测试

测试方法:

首先确定几个基底a,范围在[2,n-1]

因为n是奇数,所以n-1必定为偶数

则n-1可以表示为(2^s)*d

s、d分别求出来

设t为a^d模n的数,有如下几个约定:

1.若t=-1或1时则该数n可能为质数

2.若此时t=n-1,则该数可能为质数

3.d*2>n-1时n必为合数

4.若上述皆不满足则让d*2,返回2

多组测试之后就能判断是否为质数,而且错误率相当低!!

 

 

不过想证明米勒拉宾的正确性还是很困难的

需要费马小定理等七七八八的数论

具体的可以百度

我就给于证明了~

直接上模板:

 

1 #include
2 #include
3 #include
4 #include
5 #define ll long long 6 using namespace std; 7 8 ll add_mod(ll a,ll b,ll mod){ //快乘法 基于快速幂的二分思想 9 ll ans=0; //由于考虑到取模数很大 快速幂会溢出 10 while(b){ //必须使用该方法 11 if(b&1) //我这里写的是非递归版 12 ans=(ans+a)%mod;13 a=a*2%mod;14 b>>=1;15 }16 return ans;17 }18 19 ll pow_mod(ll a,ll n,ll mod){ //快速幂 递归版 20 if(n>1){ 21 ll tmp=pow_mod(a,n>>1,mod)%mod;22 tmp=add_mod(tmp,tmp,mod);23 if(n&1) tmp=add_mod(tmp,a,mod);24 return tmp;25 }26 return a;27 }28 29 bool Miller_Rabbin(ll n,ll a){
//米勒拉宾素数判断函数主体30 ll d=n-1,s=0,i; 31 while(!(d&1)){ // 先把(2^s)*d 算出来 32 d>>=1;33 s++;34 }35 ll t=pow_mod(a,d,n); //a^d取一次余判断 36 if(t==1 || t==-1) //一或负一则可以声明这可能是质数 37 return 1;38 for(i=0;i
tab[i] && !Miller_Rabbin(n,tab[i]))54 return 0;55 }56 return 1;57 }58 59 int main(){60 ll n;61 scanf("%lld",&n);62 if(n<2) printf("No");63 else if(n==2) printf("Yes");64 else{65 if(!n%2) printf("No");66 else if(is_prime(n))67 printf("Yes");68 else printf("No");69 }70 return 0;71 }
Miller_Rabbin

 

转载于:https://www.cnblogs.com/JVxie/p/4975876.html

你可能感兴趣的文章
结队项目——第一次作业
查看>>
第三阶段 14_JavaWeb基础_JQuery控制页面
查看>>
ThinkPHP使用smarty模板引擎的方法
查看>>
[C#]通过反射访问类私有成员
查看>>
APP开发---Windows查看端口是否被占用
查看>>
浅谈JavaScript中的eval()
查看>>
Unity3D中的线性插值Lerp()函数解析
查看>>
学到的一种把数据集序列化为本地文件的方法
查看>>
Hadoop部署配置文件
查看>>
阿里云-域名免费申请ssl证书过程
查看>>
android studio 2.2 使用cmake编译NDK
查看>>
解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题
查看>>
Android SurfaceView实战 打造抽奖转盘
查看>>
SQL查询原理及执行顺序
查看>>
浅拷贝深拷贝Python对象的拷贝
查看>>
列表代码我的第一个封装js代码-----展开收起效果
查看>>
5_4学生类
查看>>
利用cv与matplotlib.pyplot读图片与显示图片
查看>>
算法——(转)动态规划入门
查看>>
webpack 的sass-loader打包出错问题,提示 Module not found: Error: Can't resolve '*.css' 的问题...
查看>>