在好久之后终于搞完了miller-rabbin素性测试,谈谈自己的理解

  要判断的数设为 a,

  主要思想就是运用费马小定理来搞,随机几个数x(x<=a-1),判断x^(a-1)=1(mod a)是否成立,如果有不成立,a肯定不是素数

  这是有一定错误几率的,随机n个数的错误几率为4^(-n)

  这么看来,肯定是多来几组随机数比较保险,10比较稳

  期间加入了二次探测定理,以提高miller-rabbin的效率

  二次探测定理:若p是奇素数  x^2=1 (mod p) x的解一定为 1或p-1

  如果不满足此定理,一样是合数

code

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdlib>
#include<iostream>
#include<ctime>
#define ll long long
#define inf 2147483647
#define N 10
using namespace std; ll quick_mul(ll a, ll b, ll n) {
ll res = ;
while(b) {
if(b&) res = (res + a) % n;
a = (a + a) % n;
b >>= ;
}
return res;
} ll quick_pow(ll a, ll b, ll n) {
ll res = ;
while(b) {
if(b&) res = quick_mul(res, a, n);
a = quick_mul(a, a, n);
b >>= ;
}
return res;
}
bool miller_rabin(ll x){
if(x==||x==||x==||x==||x==)return ;
if(x==||!(x%)||!(x%)||!(x%)||!(x%)||!(x%))return ;
ll n=x-;int k=;
while(!(n&)){n>>=;k++;}//这么做是为了顺便加上二次探测定理 srand((ll)time());
for(int i=;i<=N;i++){
ll t=rand()%(x-)+,pre;
if(!t)continue;
t=quick_pow(t,n,x);
pre=t;
for(int i=;i<=k;i++){
t=quick_mul(t,t,x);
if(t==&&pre!=&&pre!=x-)return ;
pre=t;
}
if(t!=)return ;
}
return ; } int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int l,r,cnt=;
scanf("%d%d",&l,&r);
for(int i=l;i<=r;i++){
if(miller_rabin(i))cnt++;
}
printf("%d",cnt);
return ;
}

关于Miller-Rabbin的一点想法的更多相关文章

  1. Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

    原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他 ...

  2. 【MM系列】SAP S/4 HANA BP创建客户/供应商的一点想法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP S/4 HANA BP创建客 ...

  3. Miller Rabbin 算法—费马定理+二次探测+随机数 (讲解+例题:FZU1649 Prime number or not)

    0.引入 那年,机房里来了个新教练, 口胡鼻祖lhy 第一节课,带我们体验了暴力的神奇, 第二节课,带我们体验了随机数的玄妙, -- 那节课,便是我第一次接触到Miller Rabbin算法, 直到现 ...

  4. 大三CS狗一点想法

    本文非技术文 十点半游戏的代码大概完成了1/3,想到今晚提早验收完汇编实验,还是副院长亲自验的,似乎很看好我的样子,然后问我的方向,导师和参加的项目.聊了几句后结束了对话,不禁又引发了我的一些思考. ...

  5. 2017qcon大会的一点想法(安全人才如何不被淘汰?)

    2017 qcon 上海专门设立了“直击黑产,业务安全的攻与防”专题,通过这次专题的了解和学习,让我对黑产的攻防有了更深入认识. 1. 安全防护趋势 2017 qcon 上海专门设立了“直击黑产,业务 ...

  6. 关于WEB项目的一点想法

    有点失落.迷茫,差点在上班的时候发了火.原因是之前离职的一位同事,在代码里不加注释,而且百般偷懒,致使很多应该的验证没有验证,很多应该考虑到的情况没有考虑.因为是老员工,我相比他来说是新员工.气势上总 ...

  7. 系统架构:Web应用架构的新趋势---前端和后端分离的一点想法

    最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...

  8. C#缓存的一点想法及测试

    项目开发中,用到了缓存,其中的一个列表项,可能要多线程处理,就有了下面的想法,具体的问题在代码中有详细说明,见下文. static void Main(string[] args) { 测试缓存的想法 ...

  9. 关于java中用itext导出word的一点想法

    这几天在项目组只做了很少的事情,主要还是自己不认真地说.我的部分是要负责用itext导出word文档这一块,之前看到大佬们做出了EXCEL部分觉得很是惊奇,就像刚刚接触HTML一样的感觉.但是毕竟自己 ...

  10. 【learning】[待完善]关于辛普森公式的一点想法

    [吐槽] 嗯一开始接触到这个东西其实是因为某道凸包的题目好像可以用这个奇妙的方法来算 但其实了解也不是很深,只是觉得这个东西十分有意思, 所以先稍微写一下自己的想法,了解更多之后慢慢完善 [正题] 首 ...

随机推荐

  1. hibernate懒加载导致jackjson解析json时StackOverFlow

    @JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties jackson中的@Jso ...

  2. HTML标签小记文本类标签

    文本类标签: <input type="text" name="" value="">文本框  type(方式,方法)name文 ...

  3. JAVA版exe可执行加密软件

    1.现在eclipse(myeclipse)中插入以下代码 1.1 MainForm package cee.hui.myfile; import javax.swing.*; import java ...

  4. GIT入门笔记(1)- Git的基本概念

    一.概念和定义 1.git是什么 许多人习惯用复制整个项目目录的方式来保存不同的项目版本,或许还会改名加上备份时间以示区别.这么做唯一的好处就是简单.不过坏处也不少:有时候会混淆所在的工作目录,一旦弄 ...

  5. 修改hosts 流畅使用coursera

    以管理员权限打开 C盘 ->  Windows-> System32 -> drives -> etc -> hosts文件 在hosts文件最后写入 52.84.246 ...

  6. webservice面试题

    webservice是什么? 1.基于WEB的服务,服务端整出一些资源让客户端应用访问(提供数据) 2.webservice是一个跨语言跨平台的规范(抽象) 3.是多个跨语言跨平台的应用间通信整合的方 ...

  7. Vue框架

    Vue框架 环境: windows python3.6.2 Vue的cdn: <script src="https://cdn.jsdelivr.net/npm/vue"&g ...

  8. cache和buffer

    一.free命令是Linux查看内存使用情况的命令 1. centos 7风格 [root@bogon init.d]# free -m total used free shared buff/cac ...

  9. SpringBoot(六):springboot热部署

    在j2ee项目开发中,热部署插件是JRebel.JRebel的使用为开发人员带来了极大的帮助,且挺高了开发便捷.而在SpringBoot开发生态环境中,SpringBoot热部署常用插件是:sprin ...

  10. Struts(二十七):使用token或tokenSession防止表单重复提交

    什么是表单重复提交 表单重复提交包括以下几种情况: 前提:不刷新表单页面 1.多次点击“提交”按钮后,重复提交了多次: 2.已经提交成功之后,按“回退”按钮之后,在点击“提交”按钮后,提交成功: 3. ...