Miller Rabbin素数测试
步骤
①先写快速幂取模函数
②MR算法开始
(1)传入两个参数一个是底数一个是n也就是幂数,如果n是一个合数那么可以判定,这个数一定不是素数
(2)然后开始寻找一个奇数的n去计算,如果最后满足a^d%n=1那么这个可能就是一个素数,然后再判断k=n-1(目前数学不好不明所以)
(3)MR结束
③编写check函数,传入一个参数。首先排除一些情况
(1)是2 3 7 61(int范围内完全可以判断的底数)如果是的话return true;
(2)是偶数,1,3的倍数或5的倍数或7的倍数所有条件并起来如果满足一个那么return false
④开始进行MR的判断,一般int范围内判断2,3,7,61即可
⑤编写主函数然后输出即可
#include <bits/stdc++.h>
using namespace std;
int qpow(int a,int b,int c)
{
long long ans=1;
long long base=a;
while(b)
{
if(b&1)
ans=ans*base%c;
base=base*base%c;
b>>=1;
}
return ans;
}
bool MR(int a,int n)
{
int r=0,d=n-1;
if(!(n%a))
return false;
while(!(d&1))
{
d>>=1;
r++;
}
long long k=qpow(a,d,n);
if(k==1) return true;
for(int i=0;i<r;i++,k=k*k%n)
if(k==n-1)
return true;
return false;
}
bool check(int n)
{
if(n==2||n==3||n==7||n==61)
return true;
if(!(n&1)||!(n%3)||!(n%5)||n==1)
return false;
if(MR(2,n)&&MR(7,n)&&MR(61,n)&&MR(3,n))
return true;
return false;
}
main()
{
int k;
while(cin>>k)
check(k)?cout<<"Y\n":cout<<"N\n";
}
Miller Rabbin素数测试的更多相关文章
- POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...
- HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】
Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Miller_Rabbin大素数测试
伪素数: 如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),则n是基于a的伪素数. 是伪素数但不是素数的个数是非常非常少的,所以如果一个数是伪素数,那么他几乎是素数. Miller_Ra ...
- RSA,Miller-Rabin素数测试的源流及其证明
一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先, ...
- Miller_Rabin素数测试【学习笔记】
引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...
- poj2689Prime Distance 素数测试
朴素素数测试是O(x1/2)的,每一个数都测试下来就炸了 然而如果全部预处理的话才是做大死,时间空间各种炸(大约有1亿个数) 所以怎么平衡一下呢? 其实在预处理的时候可以只处理一半:把21474836 ...
- 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29046 Accepted: 7342 Case ...
- Miller Rabin素数检测
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #inclu ...
- hdu 6169 Senior PanⅡ Miller_Rabin素数测试+容斥
Senior PanⅡ Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Pr ...
随机推荐
- Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
之前网上看了下自己定义消息栏,通知栏,了解到了Notification这个控件.发现UC浏览器等都是这样的类型,今天写个demo实现下.如图: 当中每一个button都有不同的功能.代码例如以下: p ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- Ajax之XMLHttpRequst对象
XMLHttpRequest对象提供客户端与Http服务器异步通信的协议.通过该协议,Ajax可以使页面像桌面应用程序一样,只同服务器进行数据层的交换,而不用每次都刷新页面,也不用每次将数据处理工作提 ...
- 重装mysql
重装mysql方法. 转自http://blog.sina.com.cn/s/blog_73000beb01012eh4.html 1.删除 mysql 1.1 sudo apt-get autore ...
- 利用SSL For Free工具3分钟获取Let's Encrypt免费SSL证书
https://www.sslforfree.com/
- ubuntu/linuxmint下java环境变量设置
1.root权限下使用vi或gedit打开/etc目录下的profile文件,末尾加入环境变量. 1)命令: sudo gedit /etc/profile 2)环境变量个人案例: export JA ...
- D. Toy Sum(cf)
http://codeforces.com/problemset/problem/405/D 题意:已知集合S={1,2,3......1000000},s=1000000,从集合S中选择n个数,X= ...
- maven+ssm+oracle实现简单的增删改查
首先看一下项目结构 第一步先导入jar包 pom.xml <properties> <spring.version>4.3.18.RELEASE</spring.vers ...
- ACM_他和她(最大生成树+最短路径)
他和她 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大二上学期刚过完,平时成绩不错的小V参加了一个小型编程比赛,遇到一道题,虽 ...
- B-Tree 漫谈 (从二叉树到二叉搜索树到平衡树到红黑树到B树到B+树到B*树)
关于B树的学习还是需要做点笔记. B树是为磁盘或者其他直接存取辅助存储设备而设计的一种平衡查找树.B树与红黑树的不同在于,B树可以有很多子女,从几个到几千个.比如一个分支因子为1001,高度为2的B树 ...