算法原理详解:https://blog.csdn.net/holly_z_p_f/article/details/85197424

#include<bits/stdc++.h>
using namespace std;
#define ll long long// 18位素数:154590409516822759
// 19位素数:2305843009213693951 (梅森素数)
// 19位素数:4384957924686954497ll mul(ll a,ll b,ll mod) { //高精度a%=mod;b%=mod;ll c=(long double)a*b/mod;ll ans=a*b-c*mod;return (ans%mod+mod)%mod;
}
ll pow_mod(ll x,ll n,ll mod) { //快速幂ll res=1;while(n) {if(n&1)res=mul(res,x,mod);x=mul(x,x,mod);n>>=1;}return (res+mod)%mod;
}
bool Miller_Rabbin(ll a,ll n) {//把n-1  转化成 (2^r)*dll s=n-1,r=0;while((s&1)==0) {s>>=1;r++;}//算出 2^d  存在 k 里ll k=pow_mod(a,s,n);//二次探测  看变化过程中是不是等于1 或 n-1if(k==1)return true;for(int i=0; i<r; i++,k=k*k%n) {if(k==n-1)return true;}return false;
}
bool isprime(ll n) {//这里可以随机取a值进行探测  探测次数可以自己定//我写了几个我喜欢用的探测数据ll times=7;ll prime[100]= {2,3,5,7,11,233,331};for(int i=0; i<times; i++) {if(n==prime[i])return true;if(Miller_Rabbin(prime[i],n)==false)return false;//未通过探测 返回假}return true;//所有探测结束 返回真
}int main() {ll n;while(cin>>n){if(n==1)cout<<0<<endl;elsecout<<isprime(n)<<endl;}return 0;
}

米勒-拉宾(MillerRabbin)素性测试算法模板相关推荐

  1. 米勒-拉宾(MillerRabbin)素性测试算法

    原创滴博客~https://www.cnblogs.com/precious-ZPF/p/9481599.html 小编赶紧摘过来的,多看几遍向银家多学习学习QAQ 首先,在了解米勒-拉宾素性测试之前 ...

  2. 费马素性测试和米勒—拉宾素性测试

    chapter 1 Fermat's little theorem 费马小定理 费马小定理说的是:如果p是一个素数,那么对于任意一个整数a,a p − a 能被p整除,也可以用模运算表示如下: (p是 ...

  3. 【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表

    @TOC 素性测试是检验一个给定的整数是否为素数的测试. 最简单的就是用 n\sqrt{n}n​ 以内的数去试除.这是确定性的算法,即能准确知道 nnn 是否为质数. 但今天学习的是一种随机算法. F ...

  4. 米勒-拉宾素性检测算法

    米勒-拉宾素性检测就是目前应用比较广的一种随机化素性检测算法. 它是基于下面两个定理: (费马小定理)如果 p 为素数,且 a 无法被 p 整除,则对于所有大于0小于 p 的整数 a,有 ap−1≡1 ...

  5. C++米勒拉宾算法模板

    //我也忘了从哪找来的板子,不过对于2^63级的数据请考虑使用java内置的米勒拉宾算法. 1 #include <iostream> 2 #include <string> ...

  6. C++实现伪大素数生成算法(费马小定理判别法、米勒拉宾素数判定法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.伪大素数生成原理 方法一 方法二 数学基础 二.费马小定理判别法 1.算法 2.代码实现 3.运行结果 二.米勒拉宾素数 ...

  7. 你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法

    米勒拉宾算法的基本概念如下: 首先判断这个数n的奇偶性 若为偶数仅有2是质数 奇数则进入测试 测试方法: 首先确定几个基底a,范围在[2,n-1] 因为n是奇数,所以n-1必定为偶数 则n-1可以表示 ...

  8. 2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)

    2018宁夏网络赛 B Goldbach (米勒拉宾素数测试) 题目链接 题目大意: 给你一个偶数n (2<n<=1e18) 让你把n分解成两个素数的和.(如果有多个输出任意一个) 解题思 ...

  9. 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验

    普通的素数判断法 当我们要判断一个数字是否是素数的时候,往往会直接看这个数字模1到这个数字的根号,看有没有等于零的,从而判断这个数字是不是素数,这样做的时间复杂度为O(sqrt(n)) bool is ...

  10. HDU6608 Fansblog【Miller_Rabin素性测试算法+威尔逊定理】

    Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

最新文章

  1. predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析
  2. 中科院微生物所高程组招聘助研3名(正式编制)
  3. 一句话介绍区块链是什么
  4. Linux的网络类型
  5. [转]Tomcat优化之内存、并发、缓存
  6. mybatis 缓存总结以及遇到的问题
  7. c语言程序设计期末试卷A,《C语言程序设计》期末试卷(A)..doc
  8. 利用JAVA获取远程文件及使用断点续传 供学习者使用
  9. 明天回湖北!今天要开始收拾烂摊子了
  10. Puppet之基础篇
  11. c# gerber文件读取_Gerber文件查看方法
  12. bzoj3097 Hash Killer I
  13. EV SSL证书对网站的作用
  14. 不知道视频转文字软件哪个好用?视频转文字软件大分享
  15. Altium Designer 18 原理图编译出现off grid错误处理方法
  16. java代码混淆器proguard使用大法3种
  17. 自已写的“动易PowerEasy2006暴库工具”
  18. 第一课:暴力破解与实用性优先
  19. 网易邮箱邮件服务器问题导致收信延迟,企业邮箱使用客户端收信有延迟解决方案...
  20. linux 交叉编译工具中没有libc和liblog库文件,NDK无法找到动态链接库;动态链接库找不到依赖的gcc库;JNI中无法找到要注册的类;and so on...

热门文章

  1. 哈利波特英文单词统计频率
  2. 实习单位评价意见~实习鉴定
  3. ipmitool 工具的使用姿势
  4. 【代码重构】拒绝继承的遗赠(Refused Bequest)--如何处理子类无需使用到父类中的某些方法和变量的情况?
  5. 商务与经济统计_电子商务类北大核心期刊目录大汇总!(推荐收藏!)
  6. 帝国栏目导航点击显示不同样式的实现
  7. MSSQL 2000 823错误原因分析及数据恢复方案
  8. 免费CMS哪个好用,老站长给大家推荐这几款CMS建站系统
  9. 网站域名过户查询_过期域名查询
  10. 32程序员面试被拒,嫌弃太老,“大龄程序员”将何去何从