HDU2138 随机素数测试 Miller-Rabin算法

题目描述

  Give you a lot of positive integers, just to find out how many prime numbers there are..

  In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit signed integer, and each of them won’t be less than 2.

  32-bit signed intege,最普通的肯定要超时,筛选法要超内存,开小的话就越界。

miller_rabin算法 

一.费马小定里

if n is prime and gcd(a,n) equals one ,then a^(n-1) = 1 (mod n)

费马小定理只是个必要条件,符合费马小定理而非素数的数叫做Carmichael.

前3个Carmichael数是561,1105,1729。

Carmichael数是非常少的。

在1~100000000范围内的整数中,只有255个Carmichael数。

为此又有二次探测定理,以确保该数为素数:

二.二次探测定理

二次探测定理 如果p是一个素数,0<x<p,则方程x^2≡1(mod p)的解为x=1,p-1

根据以上两个定理,如到Miller-Rabin算法的一般步骤:

0、先计算出m、j,使得n-1=m*2^j,其中m是正奇数,j是非负整数

1、随机取一个b,2<=b

2、计算v=b^m mod n

3、如果v==1,通过测试,返回

4、令i=1

5、如果v=n-1,通过测试,返回

6、如果i==j,非素数,结束

7、v=v^2 mod n,i=i+1

8、循环到5

说明:

Miller-Rabin是随机算法

得到的结果的正确率为75%,所以应该多次调用该函数,使正确概率提高为1-(1/4)^s

解云鹏你懂了吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <algorithm>#define ll long long
using namespace std;
const int INF = 0x3f3f3f3f;
int i, j, k;
ll m, b;
int numCase;
ll n;
bool flag;
int S = 5;
ll quickpow(ll m,ll n,ll k){int b = 1;while (n > 0){if (n & 1)b = (b*m)%k;n = n >> 1 ;m = (m*m)%k;}return b;
}bool Miller_Rabin(){int temp_n = n -1;j = 0;while(temp_n % 2 == 0){++j;temp_n /= 2;}m = (n -1) / (1 << j);int v = quickpow(b, m, n);if(1 == v){flag = true;return flag;}int i = 0;while(++i <= 5){if(v == n - 1){flag = true;} else if(i == j){flag = false;return flag;}}
}bool witness(ll a,ll n){ll t,d,x;d=1;int i=ceil(log(n-1.0)/log(2.0)) - 1;for(;i>=0;i--)//快速幂操作{x=d;  d=(d*d)%n;if(d==1 && x!=1 && x!=n-1) return true;//二次探测法检测if( ((n-1) & (1<<i)) > 0)d=(d*a)%n;}return d==1? false : true;
}
bool miller_rabin(ll n){int s[]={2,7,61};if(n==2)    return true;if(n==1 || ((n&1)==0))    return false;for(int i=0;i<3;i++)if(witness(s[i], n))    return false;return true;
}int main(){while(EOF != scanf("%d",&numCase)){flag = false;int count = 0;while(numCase--){cin >> n;if(miller_rabin(n)) ++count;}cout << count << endl;}return 0;
}

 

转载于:https://www.cnblogs.com/wushuaiyi/p/3879149.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] 你写一个页面需要多长时间?

[html] 你写一个页面需要多长时间&#xff1f; 和页面结构&#xff0c;样式&#xff0c;交互设计正相关个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)...

Android开发平台中&#xff0c;可通过TelephonyManager 获取本机号码。 TelephonyManager phoneMgr(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号注…

vba copy sheet

Sub copySheet() Dim wkbk As Workbook Set wkbk Workbooks.open("源文件.xls") 先打开要复制的文件 wkbk.sheets(1).Copy thisworkbook.sheets(1) 再将此文件中第一个工作表复制到当前工作簿的第一个工作表前 End Sub 这样是最简单的代码了&#xff0c;但是有些限制…

Android仿ios二级菜单侧滑,仿IOS的列表项滑动菜单——ListItemMenu

一个简单的仿IOS的列表项滑动菜单(也不知道怎么描述比较好)。顺手做出来的小东西&#xff0c;就分享给大家了。仿iOS列表项滑动菜单:1、滑动出现菜单&#xff0c;越界阻尼效果&#xff1b;2、删除列表项效果。GitHub地址:https://github.com/zarics/ListItemMenu1.[代码]布局示…

[html] 你认为一个好的布局应该是什么样的?有哪些需要注意的地方?

[html] 你认为一个好的布局应该是什么样的&#xff1f;有哪些需要注意的地方&#xff1f; 先布局整体,再细分到模块; 先抽离组件再分离业务个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与…

判断cloudblob是否存在

这是开博的第一篇&#xff0c;还要废话一下。我写的很多内容都是网上找资料然后自己总结出来的&#xff0c;原出处已经很难找到了&#xff0c;所以不会标出引用的内容。如果侵犯到您的版权&#xff0c;请和我联系&#xff0c;我会删改相关的内容。 cloudblob 是azure blob的一个…

android studio炸包怎么导入,请问android studio如何引入包

梦里花落0921jar包放项目根目录libs文件夹右键选择Add As Library"剩选项默认行点击。Show import popup&#xff0c;这个是用于编辑XML时&#xff0c;自动会弹出一个import的对话框&#xff0c;问你是否需要导入。JavaInsert imports on paste:(All Ask None),这个其实就…

[html] button标签的type默认值是什么呢?

[html] button标签的type默认值是什么呢&#xff1f; Internet Explorer 的默认类型是 "button"&#xff0c;而其他浏览器中&#xff08;包括 W3C 规范&#xff09;的默认值是 "submit"。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放…

Java 理论与实践:让 J2EE 脱离容器

大多数项目不是属于 J可以存在于 J2EE 容器之外Goetz 分析如何在 J2SE 应他读者分享您关于本文的心2EE 应用程序就是属于 J2SE 应&#xff0c;并且有些 J2SE 应用程序可以用程序中使用某些 J2EE 服务。得。&#xff08;您也可以单击文章顶部或用程序。不过&#xff0c;有一些 J…

eclipse IDE中無法打開android模擬器

转帖&#xff1a;http://blog.csdn.net/wang_shaner/article/details/6784852 错误提示为&#xff1a; invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.Hint: use foo to launch a virtual device named foo.please use -help for more in…

[html] H5的哪些特性需要https支持呢?

[html] H5的哪些特性需要https支持呢&#xff1f; service workers个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

android view rotate,Android使用RotateImageView 旋转ImageView

废话不多说了&#xff0c;直接给大家代码。具体代码如下所示&#xff1a;package com.droidhen.game.layout;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.…

传惠普CEO李艾科将部署全新战略计划

北京时间1月15日消息&#xff0c;据知情人士透露&#xff0c;惠普新任CEO李艾科(Leo Apotheker)即将完成一项战略计划&#xff0c;包括重组管理层&#xff0c;以及将更多精力放在利润率更高的业务上。 知情人士表示&#xff0c;这些计划包括向软件、网络和存储业务投入更多资源…

[html] 请使用canvas画一个渐变的长方形

[html] 请使用canvas画一个渐变的长方形 // 普通canvas绘图工具类// umd适配多种引入方式 (function(root, factory) {if (typeof define function && define.amd) {// AMDdefine([CanvasTool], factory);} else if (typeof exports object && typeof modul…

动态规划-直方图最大长方形

/* 1017: C03-单调栈算法-最大长方形时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 10 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述给你一个直方图&#xff0c;告诉你各个条形矩形的高度&#xff0c;求基线对齐构成的矩形中面积最大的矩形的面积。对于每一个矩形…

android记事本项目案例,Android实现记事本项目完整实例源代码

【实例简介】记事本项目源码&#xff0c;我的博客有详细描述。一个记事本&#xff0c;能够输入标题和内容&#xff0c;创建日期、最新修改日期等信息。如果没有输入标题则使用内容的第一句话作为标题&#xff0c;创建日期和修改日期均由系统自动生成&#xff0c;无需用户干预。…

Metropolis Hasting算法

Metropolis Hasting Algorithm: MH算法也是一种基于模拟的MCMC技术&#xff0c;一个很重要的应用是从给定的概率分布中抽样。主要原理是构造了一个精妙的Markov链&#xff0c;使得该链的稳态是你给定的概率密度。它的好处&#xff0c;不用多说&#xff0c;自然是可以对付数学形…

[html] html的开始与结束标签嵌套错误会导致哪些问题?

[html] html的开始与结束标签嵌套错误会导致哪些问题&#xff1f; 有的可以被正常解析&#xff0c;有的不行。题目中的例子可以被正常解析&#xff0c;如果是 <div><a>标题</div></a>&#xff0c;a 标签不能被正常解析。个人简介 我是歌谣&#xff0…

荣耀变鸿蒙系统,鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单...

原标题&#xff1a;鸿蒙系统首批升级机型曝光&#xff01;荣耀手机遗憾缺席&#xff0c;原因很简单大家好&#xff0c;我是科技君的探讨&#xff0c;欢迎关注我&#xff0c;与我一起进行科技的探讨。华为鸿蒙系统可以说是目前数码圈关注度最高的事件之一了。从早期公布&#xf…

bzoj2733永无乡

永无乡 HYSBZ - 2733 永无乡包含 n 座岛&#xff0c;编号从 1 到 n&#xff0c;每座岛都有自己的独一无二的重要度&#xff0c;按照重要度可 以将这 n 座岛排名&#xff0c;名次用 1 到 n 来表示。某些岛之间由巨大的桥连接&#xff0c;通过桥可以从一个岛 到达另一个岛。如果…