关于Miller-Rabbin的一点想法

  在好久之后终于搞完了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

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<queue>
 5 #include<cmath>
 6 #include<vector>
 7 #include<cstdlib>
 8 #include<iostream>
 9 #include<ctime>
10 #define ll long long
11 #define inf 2147483647
12 #define N 10
13 using namespace std;
14
15 ll quick_mul(ll a, ll b, ll n) {
16     ll res = 0;
17     while(b) {
18         if(b&1) res = (res + a) % n;
19         a = (a + a) % n;
20         b >>= 1;
21     }
22     return res;
23 }
24
25 ll quick_pow(ll a, ll b, ll n) {
26     ll res = 1;
27     while(b) {
28         if(b&1) res = quick_mul(res, a, n);
29         a = quick_mul(a, a, n);
30         b >>= 1;
31     }
32     return res;
33 }
34 bool miller_rabin(ll x){
35     if(x==2||x==3||x==5||x==7||x==11)return 1;
36     if(x==1||!(x%2)||!(x%3)||!(x%5)||!(x%7)||!(x%11))return 0;
37     ll n=x-1;int k=0;
38     while(!(n&1)){n>>=1;k++;}//这么做是为了顺便加上二次探测定理
39
40     srand((ll)time(0));
41     for(int i=1;i<=N;i++){
42         ll t=rand()%(x-1)+1,pre;
43         if(!t)continue;
44         t=quick_pow(t,n,x);
45         pre=t;
46         for(int i=1;i<=k;i++){
47             t=quick_mul(t,t,x);
48             if(t==1&&pre!=1&&pre!=x-1)return 0;
49             pre=t;
50         }
51         if(t!=1)return 0;
52     }
53     return 1;
54
55 }
56
57
58 int main(){
59     //freopen(".in","r",stdin);
60     //freopen(".out","w",stdout);
61     int l,r,cnt=0;
62     scanf("%d%d",&l,&r);
63     for(int i=l;i<=r;i++){
64         if(miller_rabin(i))cnt++;
65     }
66     printf("%d",cnt);
67     return 0;
68 }

时间: 2024-10-12 20:19:27

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

关于UED前端开发的一点想法

5.2 关于UED前端开发的一点想法 5.2.1 目前UED前端代码是一个页面对应一个JS文件,更有甚者一个JS文件的代码会超过万行,这样的代码试想该如何维护?如果在从事前端开发的时候避免这种尴尬的局面,我想最好的方式就是分而治之, 如果分而治之?首先解析页面的一般思路,初始化(init) 事件绑定(event)页面读值(getData)页面写值(setData)重置页面(resetData)页面展示(setView)页面校验(checkData)页面异步加载 (ajax),页面测试(test)

多应用统一开发平台的一点想法

几年工作下来,发现有一个问题一直困扰着我们: 随着项目的越来越完善,功能越来越丰富,单一一个应用已经不能够支撑开发人员的需要.于是我们就需要根据业务分拆成几个相对独立的应用来满足多个开发团队的需求.但是这样也造成了一些问题,多个应用需要公用的基础代码维护起来越来越复杂,导致种种问题.也有很多种方式来解决,比如公共代码放置单独的地方,这样有带来的自动化部署方面的困难.在此,鄙人提出一种解决方法,即多应用统一开发平台的概念.在此以rails应用为例. 标准的rails应用结构如下: Gemfile

对当前网络路由的一点想法

五一小长假,和朋友开车去了浙江,发现了"基于目的地的最短距离算法"的弊端,也许就是这个算法导致了高速公路在某个时间段的定期规律性拥堵!从嘉定出发,G1501一路畅通,但是一旦转到G60沪昆高速,瞬间拥堵起来,实际上,早在G1501上时,就有公告牌,说沪昆高速有施工,可是大家还是全部转到了沪昆高速,留下S19/G15成了被抛弃的摆设...知道原因是什么吗?很简单,因为沪昆高速那条路最近!人们太相信导航,很少有人没事研究地图,所以很多人都上了当,当然这并不包括我.很多导航都是根据Dijks

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

原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他们会检测系统是否已经安装了.NET,如果没有,则调用.NET安装包来安装.但是.NET安装完是需要重启动的,一般来说,我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时,使用如下:LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x

关于标签系统的又一点想法。

前段时间,写过一篇<关于标签系统的一点想法.>.但其实没有谈到里面的内容,是有一部分来自与刘鑫老师的聊天,当时他给了我许多肯定,也是让我觉得记录下来很有必要的原因. 前一篇里没有提到,我跟刘老师谈到一个更加深入一点的.关于标签系统的想法.主要原因是因为我尚不肯定这是否也属于标签系统.直到最近disylee 送了一本标签 : 标记系统设计实践给我,里面的一个小节让我为自己的想法找到了理论依据. 很不错的一本书,没有让我失望,解答了我心中的一些困惑.书有点啰嗦,但也正因为此显得"系统&q

对创业团队的一点想法

本人 没有强大的技术,没有广阔的人脉,没有超前的远见,只因在创业团队中待过一年,有了一些想法,即记录下来.这里对给我这次机会的公司表示感谢!这里说提互联网及软件方向的创业团队. 1. 不宜过早制度化 当然,对于打卡这样的制度并不排斥.但是对于对上百人团队的管理方法,不宜过早产生.比如详细区分不同部门,部门与部门有专门负责人.做一次软件发布要层层审批,经过同意后,再到发布,已经又有很多问题修复了. 部门与部门之间建立负责人,本意是为了不让沟通变的混乱,但创业团队,每个部门又能有多少人,本来只是找某

软件工程课程教育的一点想法

大学本科的软件工程课程一直遵循瀑布型的为线索的各个里程碑的相关知识点的展开介绍,现在多有理论框架与实践能力孰重孰轻之争.这里我也有一点点自己的看法. 软件工程在项目开发教学中的作用实质上类似计算机导论在计算机教育中的学科地位,应当属于前导性,线索性,框架式介绍,细思量其内容之广.理论之重.实践之繁的教学之繁重,本身就不是一个学期能承载得了的.既然教学大纲只安排一个学期,充其量,将来慢慢发展应当只是领学习者进门的而一个入门学科而已.而不是有些人说的那么危及及乎的想法. 站在更高一些的高度,比如体系

在老男孩学习的一点想法

今天是2015年12月28日,再过3天就是2016了,时间过得真快. 转眼间已经在老男孩学习快4个月了,整个课程即将结束,说一下在老男孩这段时间学习的感受. 老男孩是不是一个好老师,这个不需要我来说,凡是知道老男孩的都应该知道.O(∩_∩)O哈哈~~老师说,思维决定高度.从零开始学习一门新的知识,最重要的要有一个自己的框架,然后把一个一个零碎的知识点放到框架上.对于运维来说更是如此,因为运维所涉及的知识点更多,更杂,更乱,如果没有一个完整的清晰的整体知识框架,根本就不可能在运维这条路上有多大发展

有点想法系列:借助海尔平台打造智能家居的一点想法

前言:这只是本人做了一个无线通信项目,看了一篇文章,吃了一顿饭,饭桌上和同事讨论了手机行业(原谅京瓷和NEC都做过手机啊,原谅楼主村里人 没见识,感叹惊讶一下),之后加班,胡思乱想产生的个人想法,请不要嘲笑,照顾一下作者的弱小心灵,传播正能量. 物联网专业在我的母校西安理工大学已经开设,(分属计算机学院和自动化学院),最近畅想了一下智能家居,发现物联网这个很火爆的话题和概念,这么 多年了,却是依旧是现实中火不起来,比如海尔张瑞敏说的这么多年的要把海尔互联网化,其实现在海尔却仍是一个制造型企业,今

华为苏研所2次面试失败的一点想法。。。

面试岗位:研发类 2018年4月校招华为苏研所,二面挂,我总结的原因是:过于紧张,紧张到话都说不清楚.至于为什么紧张,原因很多:1.当时没有offer,急需一个offer,这个offer相当于一颗救心丸,对于当时的我来说是一种肯定.因为前面4.5家面试都失败了,且华为是我很想去的公司.2.没有自信,这个主要原因是自己菜.至于为什么认为自己菜,原因在下面.3.跟同学.朋友说过,华为是我的目标.如果失败了,那么这个B就装失败了. 2018年10月秋招,虽然不是主动投的(华为短信征询的面试意愿,再试一