Miller-Rabin素性测试算法是概率算法,不是确定算法。然而测试的计算速度快,比较有效,被广泛使用。

另外一个值得介绍的算法是AKS算法,是三位印度人发明的,AKS是他们的姓氏首字母。ASK算法是确定算法,其时间复杂度相当于多项式的,属于可计算的算法。

代码来自Sanfoundry的C++ Program to Implement Miller Rabin Primality Test。

源程序如下:

/* * C++ Program to Implement Miller Rabin Primality Test*/#include <iostream>
#include <cstring>
#include <cstdlib>
#define ll long longusing namespace std;/* * calculates (a * b) % c taking into account that a * b might overflow */ll mulmod(ll a, ll b, ll mod)
{ll x = 0,y = a % mod;while (b > 0){if (b % 2 == 1){    x = (x + y) % mod;}y = (y * 2) % mod;b /= 2;}return x % mod;
}/* * modular exponentiation*/
ll modulo(ll base, ll exponent, ll mod)
{ll x = 1;ll y = base;while (exponent > 0){if (exponent % 2 == 1)x = (x * y) % mod;y = (y * y) % mod;exponent = exponent / 2;}return x % mod;
}/** Miller-Rabin primality test, iteration signifies the accuracy*/
bool Miller(ll p,int iteration)
{if (p < 2){return false;}if (p != 2 && p % 2==0){return false;}ll s = p - 1;while (s % 2 == 0){s /= 2;}for (int i = 0; i < iteration; i++){ll a = rand() % (p - 1) + 1, temp = s;ll mod = modulo(a, temp, p);while (temp != p - 1 && mod != 1 && mod != p - 1){mod = mulmod(mod, mod, p);temp *= 2;}if (mod != p - 1 && temp % 2 == 0){return false;}}return true;
}//Main
int main()
{int iteration = 5;ll num;cout<<"Enter integer to test primality: ";cin>>num;if (Miller(num, iteration))cout<<num<<" is prime"<<endl;elsecout<<num<<" is not prime"<<endl;return 0;
}

C++实现的Miller-Rabin素性测试程序相关推荐

  1. C++Miller Rabin算法的实现(附完整源码)

    C++Miller Rabin算法的实现算法 C++Miller Rabin算法的实现算法完整源码(定义,实现,main函数测试) C++Miller Rabin算法的实现算法完整源码(定义,实现,m ...

  2. 素数判定算法 MILLER RABIN

    入门级筛素数--试除法,复杂度O(n^2) bool rmprime( long long n ) {for(long long i = 2; i <= sqrt(n) ; i++) if(n% ...

  3. (Miller Rabin算法)判断一个数是否为素数

    (Miller Rabin算法)判断一个数是否为素数 1.约定 x%y为x取模y,即x除以y所得的余数,当x<y时,x%y=x,所有取模的运算对象都为整数. x^y表示x的y次方.乘方运算的优先 ...

  4. Magic的Miller Rabin素数测定和Pollard's Rho质因子分解法

    boshi大佬帮助了litble,使愚蠢的litble(可能?)学会了这种神奇的算法. orz boshi. 例题:poj1811 Miller Rabin 又称米勒挝饼, 一种神奇的快速判定一个数是 ...

  5. 素数判定质因数分解(数论)(Miller Rabin)(Pollard Rho)

    太玄学了! 我真的被概率的魅力折服了.此前我认为1便是1,0.9999999999-便是0.9999999999-. 但实际上它们有着千丝万缕的关系. 试想,如果一件事发生的概率是0.99999999 ...

  6. 与数论的厮守01:素数的测试——Miller Rabin

    看一个数是否为质数,我们通常会用那个O(√N)的算法来做,那个算法叫试除法.然而当这个数非常大的时候,这个高增长率的时间复杂度就不够这个数跑了. 为了解决这个问题,我们先来看看费马小定理:若n为素数, ...

  7. 米勒罗宾素性测试(Miller–Rabin primality test)

    1 #include<iostream> //该程序为哥德巴赫猜(想输出所有的组合) 2 #include<cmath> 3 #include<cstdlib> 4 ...

  8. GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)

    题目:GCD and LCM Aizu - 0005 Write a program which computes the greatest common divisor (GCD) and the ...

  9. Miller Rabin质数判定模板(2)

    首先介绍一个相关的引理. 和 总是得到1,称这两个数为1的"平凡平方根".当p是素数且p>2时,不存在 的"非平凡平方根".为了证明该引理,我们假设x是 ...

最新文章

  1. desc 枚举类型id_枚举系列(四):实现接口的枚举类
  2. iOS 关于权限设置的问题
  3. 判断python模型是否安装的办法
  4. delphi libeay32 各版本_Zbrush各版本合集
  5. FastJSON 简介及其Map/JSON/String 互转(转载)
  6. iapp启动图代码_代码神器:拒绝重复编码,这款IDEA插件了解一下.....
  7. javaScript第二天(1)
  8. random.next_Java Random next()方法与示例
  9. Mvc前后端显示不同的404错误页
  10. TensorFlow 2.4 发布
  11. php larvel https,Laravel 5-重定向到HTTPS
  12. C++:字符串转换成整数
  13. 什么是信用评分分析?
  14. 处理器仿存带宽_处理器及内存带宽测试
  15. 记录神通数据库2022安装
  16. java生成zipf分布_用于文本生成的Java中的Zipf定律 – 太慢了
  17. STA静态时序分析/Formality形式化验证
  18. Ubuntu安装后初次配置
  19. autohotkey 函数
  20. 我们一起学爪哇(2)

热门文章

  1. Grafana全面瓦解
  2. Unity Android 动态更新 Assembly-CSharp.dll
  3. 关于用C#编写ActiveX控件4(转)
  4. Hive SQL开窗函数详解
  5. Spark解决的问题与体系结构
  6. SpringBoot自定义注解接收json参数
  7. 休闲娱乐的计算机配置,入门APU主机配置 1199元双核APU家用娱乐电脑配置推荐
  8. 上海技术计算机学校学费多少,上海web前端学校学费一般是多少
  9. python自定义函数大全-Python自定义函数
  10. 在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?