[模板] Miller_Rabin素数判断代码实现存档
就是....存存代码吧。
Miller_Rabin的最核心部分在于二次探测定理和费马小定理。后者在同余/逆元的题目里面或多或少都有提及吧.....前者也很简单。
总而言之,Miller_Rabin不算很难啦,值得去学习一下~
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int S=5;
ll qpow(ll x,ll k,ll mod){
ll ret=1;
while(k){
if(k&1) ret=(ret*x)%mod;
x=(x*x)%mod;
k>>=1;
}
return ret;
}
bool miller_rabin(ll n){
if(n<2) return false;
if(n==2) return true; // 特判一波
ll x,pre,u;
int k=0;
u=n-1;
while(!(u&1)){
k++, u>>=1;
} // 取2位数
for(int i=1;i<S;i++){ // 做S次判断
x=rand()%(n-2)+2; // 随机取(2,n)的数,n若是质数,x肯定与n互质
x=qpow(x,u,n); // 先算 x^u
pre=x;
for(int i=0;i<k;i++){
x=(x*x)%n; // x^2,二次探测定理
if(x==1 && pre!=1 && pre!=n-1) return false;
pre=x;
}
if(x%n!=1)return false; // 费马小定理
}
return true;
}
int main(){
ios::sync_with_stdio(false);
srand(time(0));
int m,na;
cin>>m>>m;
while(m--){
cin>>na;
if(miller_rabin(na)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
[模板] Miller_Rabin素数判断代码实现存档的更多相关文章
- Miller_Rabin素数判断,rho
safe保险一点5吧.我是MR: ; int gcd(int a,int b){return !b?a:gcd(b,a%b);} int mul(int a,int b,int p){ )*p); ? ...
- POJ 1811 大素数判断
数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...
- 有关素数判断的一些算法(总结&&对比)
素性测试是数论题中比较常用的一个技巧.它可以很基础,也可以很高级(哲学).这次主要要介绍一下有关素数判断的奇技淫巧 素数的判断主要分为两种:范围筛选型&&单个判断型 我们先从范围筛选型 ...
- Miller_Rabin素数测试【学习笔记】
引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...
- #C++初学记录(素数判断2)
素数判断2 比较简单的算法,没有技术含量 A prime number is a natural number which has exactly two distinct natural numbe ...
- #C++初学记录(素数判断)
练习题目二 素数判断 A prime number is a natural number which has exactly two distinct natural number divisors ...
- Beego模板 循环和判断几个例子
Beego模板 循环和判断几个例子 Beego的前端几乎是另一种语言.一些循环.判断,不细看文档真的做不出来. 0. Beego的View模板语法规则: beego前端(view)统一使用了 {{ 和 ...
- 最短的数字判断代码 js
转自 http://www.cnblogs.com/snandy/p/3590186.html 我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是nu ...
- 使用 T4 文本模板生成设计时代码
使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的 ...
随机推荐
- 手机端的META你知道多少
一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...
- ZOJ 3161 Damn Couples 动态规划 难度:2
Damn Couples Time Limit: 1 Second Memory Limit: 32768 KB As mentioned in the problem "Coup ...
- Windows 7 英文版操作系统中文软件乱码解决方法
http://blog.csdn.net/lqhbupt/article/details/18863243
- hadoop IPC 源代码分析
如图所示, 在hadoop中客户端需要和服务端通信 . 首先我们看一下需求是啥. 举一个例子,在客户端想要往hadoop集群中写数据的时候,它需要先和namenode通信,以便获得 诸一 ...
- 网络编程(socket,套接字)
服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程 网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...
- array_merge、array_merge_recursive
原文:http://www.111cn.net/phper/php/61889.htm 我在php学习在使用到最多的数据合并方法就是array_merge.array_merge_recursi ...
- XDocument 使用
摘要: 正文: 1.引入XDocument的命名空间 using System.Xml.Linq; 2. List<CourseItem> to XML doc //List<Cou ...
- 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库
前言 最近又开始进行人脸检测方向的内容,看到于仕琪老师的多角度检测想试一下,还不清楚原理,先测试效果如何. libfacedetect人脸检测库是深圳大学于仕琪老师发布的开源库,与opencv自带的人 ...
- can-utils源码解析cansend
前言 本文主要介绍socketCan中的发送函数cansend的源码解析. 代码 /* * cansend.c - simple command line tool to send CAN-frame ...
- [LeetCode&Python] Problem 617. Merge Two Binary Trees
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...