就是....存存代码吧。

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素数判断代码实现存档的更多相关文章

  1. 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); ? ...

  2. POJ 1811 大素数判断

    数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...

  3. 有关素数判断的一些算法(总结&&对比)

    素性测试是数论题中比较常用的一个技巧.它可以很基础,也可以很高级(哲学).这次主要要介绍一下有关素数判断的奇技淫巧 素数的判断主要分为两种:范围筛选型&&单个判断型 我们先从范围筛选型 ...

  4. Miller_Rabin素数测试【学习笔记】

    引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...

  5. #C++初学记录(素数判断2)

    素数判断2 比较简单的算法,没有技术含量 A prime number is a natural number which has exactly two distinct natural numbe ...

  6. #C++初学记录(素数判断)

    练习题目二 素数判断 A prime number is a natural number which has exactly two distinct natural number divisors ...

  7. Beego模板 循环和判断几个例子

    Beego模板 循环和判断几个例子 Beego的前端几乎是另一种语言.一些循环.判断,不细看文档真的做不出来. 0. Beego的View模板语法规则: beego前端(view)统一使用了 {{ 和 ...

  8. 最短的数字判断代码 js

    转自  http://www.cnblogs.com/snandy/p/3590186.html 我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是nu ...

  9. 使用 T4 文本模板生成设计时代码

      使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的 ...

随机推荐

  1. json 与字符串相互转换,

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. (C#基础)创建文件,文件夹

    文件夹,文件这是常见的,怎么创建?要不要先判断是否存在?非常非常基础的知识点. 代码 using System; using System.Collections.Generic; using Sys ...

  3. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  4. Struts2内置校验器——完整实例代码

    一.校验器的配置风格 1.字段校验器: <field name="被校验的字段"> <field-validator type="校验器名"& ...

  5. MyEclipse移动开发教程:设置所需配置的iOS应用(三)

    MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 三.创建配置文件 Provisioning profiles授权文件应用程序在iOS设备上安装并运 ...

  6. TJson.format() 输出错误的CRLF

    下面的JSON串: { "a":"x=\"a,b\"" } 通过下面代码输出,多了CRLF: procedure JsonFormatTes ...

  7. Python中字典的基本操作

    字典(Dictionary)是一映射类型(Key-value):字典是可变的,可存储任意类型对象 字典的定义用大括号{ },每个值用 ”,“ 逗号隔开,key和value使用 ”:“ 冒号分隔 字典的 ...

  8. UIViewController简述

    一.View Controller Classes 二.自定义UIVIewController 1.创建 a)nib文件 [cpp] view plaincopyprint?   - (BOOL)ap ...

  9. HDU 1010:Tempter of the Bone(DFS+奇偶剪枝+回溯)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. ElasticSearch(十):springboot集成ElasticSearch集群完成数据的增,删,改

    前言 之前介绍了使用devTools进行索引库数据的crud,这里使用的是java程序,使用中间件activeMQ进行数据库和索引库数据的同步.主要是用来完成对数据库的修改来完成对索引库的同步. 正文 ...