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

Miller_Rabin的最核心部分在于二次探测定理和费马小定理。后者在同余/逆元的题目里面或多或少都有提及吧.....前者也很简单。

总而言之,Miller_Rabin不算很难啦,值得去学习一下~

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int S=5;
  5. ll qpow(ll x,ll k,ll mod){
  6. ll ret=1;
  7. while(k){
  8. if(k&1) ret=(ret*x)%mod;
  9. x=(x*x)%mod;
  10. k>>=1;
  11. }
  12. return ret;
  13. }
  14. bool miller_rabin(ll n){
  15. if(n<2) return false;
  16. if(n==2) return true; // 特判一波
  17. ll x,pre,u;
  18. int k=0;
  19. u=n-1;
  20. while(!(u&1)){
  21. k++, u>>=1;
  22. } // 取2位数
  23. for(int i=1;i<S;i++){ // 做S次判断
  24. x=rand()%(n-2)+2; // 随机取(2,n)的数,n若是质数,x肯定与n互质
  25. x=qpow(x,u,n); // 先算 x^u
  26. pre=x;
  27. for(int i=0;i<k;i++){
  28. x=(x*x)%n; // x^2,二次探测定理
  29. if(x==1 && pre!=1 && pre!=n-1) return false;
  30. pre=x;
  31. }
  32. if(x%n!=1)return false; // 费马小定理
  33. }
  34. return true;
  35. }
  36. int main(){
  37. ios::sync_with_stdio(false);
  38. srand(time(0));
  39. int m,na;
  40. cin>>m>>m;
  41. while(m--){
  42. cin>>na;
  43. if(miller_rabin(na)) cout<<"Yes"<<endl;
  44. else cout<<"No"<<endl;
  45. }
  46. return 0;
  47. }

[模板] 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. 手机端的META你知道多少

    一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...

  2. ZOJ 3161 Damn Couples 动态规划 难度:2

    Damn Couples Time Limit: 1 Second      Memory Limit: 32768 KB As mentioned in the problem "Coup ...

  3. Windows 7 英文版操作系统中文软件乱码解决方法

    http://blog.csdn.net/lqhbupt/article/details/18863243

  4. hadoop IPC 源代码分析

           如图所示, 在hadoop中客户端需要和服务端通信 . 首先我们看一下需求是啥. 举一个例子,在客户端想要往hadoop集群中写数据的时候,它需要先和namenode通信,以便获得 诸一 ...

  5. 网络编程(socket,套接字)

    服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程   网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...

  6. array_merge、array_merge_recursive

    原文:http://www.111cn.net/phper/php/61889.htm    我在php学习在使用到最多的数据合并方法就是array_merge.array_merge_recursi ...

  7. XDocument 使用

    摘要: 正文: 1.引入XDocument的命名空间 using System.Xml.Linq; 2. List<CourseItem> to XML doc //List<Cou ...

  8. 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库

    前言 最近又开始进行人脸检测方向的内容,看到于仕琪老师的多角度检测想试一下,还不清楚原理,先测试效果如何. libfacedetect人脸检测库是深圳大学于仕琪老师发布的开源库,与opencv自带的人 ...

  9. can-utils源码解析cansend

    前言 本文主要介绍socketCan中的发送函数cansend的源码解析. 代码 /* * cansend.c - simple command line tool to send CAN-frame ...

  10. [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 ...