二次探测定理:如果是素数,且,则方程的解为

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>using namespace std;
const int Times = 10;
typedef long long LL;LL multi(LL a, LL b, LL m)
{LL ans = 0;a %= m;while(b){if(b & 1){ans = (ans + a) % m;b--;}b >>= 1;a = (a + a) % m;}return ans;
}LL quick_mod(LL a, LL b, LL m)
{LL ans = 1;a %= m;while(b){if(b & 1){ans = multi(ans, a, m);b--;}b >>= 1;a = multi(a, a, m);}return ans;
}bool Miller_Rabin(LL n)
{if(n == 2) return true;if(n < 2 || !(n & 1)) return false;LL m = n - 1;int k = 0;while((m & 1) == 0){k++;m >>= 1;}for(int i=0; i<Times; i++){LL a = rand() % (n - 1) + 1;LL x = quick_mod(a, m, n);LL y = 0;for(int j=0; j<k; j++){y = multi(x, x, n);if(y == 1 && x != 1 && x != n - 1) return false;x = y;}if(y != 1) return false;}return true;
}int main()
{int T;scanf("%d",&T);while(T--){LL n;scanf("%I64d",&n);if(Miller_Rabin(n)) puts("Yes");else puts("No");}return 0;
}

质数检测Java大数版:

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1186

import java.io.*;
import java.util.*;
import java.math.BigInteger;public class Main{public static final int Times = 10;public static BigInteger quick_mod(BigInteger a,BigInteger b,BigInteger m){BigInteger ans = BigInteger.ONE;a = a.mod(m);while(!(b.equals(BigInteger.ZERO))){if((b.mod(BigInteger.valueOf(2))).equals(BigInteger.ONE)){ans = (ans.multiply(a)).mod(m);b = b.subtract(BigInteger.ONE);}b = b.divide(BigInteger.valueOf(2));a = (a.multiply(a)).mod(m);}return ans;}public static boolean Miller_Rabin(BigInteger n){if(n.equals(BigInteger.valueOf(2))) return true;if(n.equals(BigInteger.ONE)) return false;if((n.mod(BigInteger.valueOf(2))).equals(BigInteger.ZERO)) return false;BigInteger m = n.subtract(BigInteger.ONE);BigInteger y = BigInteger.ZERO;int k = 0;while((m.mod(BigInteger.valueOf(2))).equals(BigInteger.ZERO)){k++;m = m.divide(BigInteger.valueOf(2));}Random d = new Random();for(int i=0;i<Times;i++){int t = 0;if(n.compareTo(BigInteger.valueOf(10000)) == 1){t = 10000;}else{t = n.intValue() - 1;}int a = d.nextInt(t) + 1;BigInteger x = quick_mod(BigInteger.valueOf(a),m,n);for(int j=0;j<k;j++){y = (x.multiply(x)).mod(n);if(y.equals(BigInteger.ONE) && !(x.equals(BigInteger.ONE)) && !(x.equals(n.subtract(BigInteger.ONE)))) return false;x = y;}if(!(y.equals(BigInteger.ONE))) return false;}return true;}public static void main(String[] args){Scanner cin = new Scanner(System.in);while(cin.hasNextBigInteger()){BigInteger n = cin.nextBigInteger();if(Miller_Rabin(n)) System.out.println("Yes");else System.out.println("No");}}
}

Miller-Rabin素数测试相关推荐

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

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

  2. 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 ...

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

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

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

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

  5. 素数判定算法 MILLER RABIN

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

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

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

  7. FZU 1649 Prime number or not (大素数测试)

    题目链接 Problem 1649 Prime number or not Accept: 661    Submit: 3016 Time Limit: 2000 mSec    Memory Li ...

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

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

  9. FZU 1649 Prime number or not (Miller-Rabin素数测试)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1649 题目大意:很直接,判断一个数n(2<=n<=10^18)是不是素数.   当n达到long ...

  10. BZOJ 4802: 欧拉函数(大数因数分解算法 Pollard_rho 和素数测试算法 Miller_Rabin)

    Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Output 4 Soluti ...

最新文章

  1. linux系统下vim可以不用鼠标,真的有(很多)linux大牛用vim写项目吗?
  2. HPU 第三次积分赛:阶乘之和(水题)
  3. 庄小威、陈志坚等9位科学家分享2100万美元奖金:2019年科学突破奖公布
  4. 蓝桥杯历届试题----分糖果(模拟)
  5. 《大数据》第1期“专题”——大数据机器学习系统研究进展(上)
  6. ConcurrentHashMap是如何保证线程安全的,你知道么?
  7. 记录Access数据库更新操作大坑一个
  8. 100套计算机毕设源码+论文 免费分享 【2020最新版】
  9. 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
  10. 智能硬件成在线教育救命稻草?
  11. PHP+ajaxfileupload 实现用户头像上传
  12. canvas如何绘制虚线
  13. php中如何导出表格,PHP如何实现表格Excel的导出
  14. STM32F4xx的时钟树
  15. 【零一原创】2020 CSP-J 复赛题解 400分攻略
  16. 二级列表ExpandableListView的CheckBox使用
  17. 一文带你看懂JAVA IO流(一),史上最全面的IO教学啦(附送JAVA IO脑图)
  18. 显卡html5性能测试工具,GPU Caps Viewer(显卡检测工具)
  19. 100g的攻击大概是多少钱一天?
  20. 拉链表的详细实现过程(好文点赞收藏!!)

热门文章

  1. 为什么需要用户自定义类加载器及具体实现
  2. Azkaban-two_server模式-安装3和启动运行
  3. Hive的安装-Hive配置
  4. 外观模式源码解析(springjdbc+myabtis+tomcat)
  5. Nginx 搭建图片缓存服务器-转
  6. Shiro之从数据库初始化角色权限信息
  7. WPF特效-实现弧形旋转轮播图
  8. [译] 标准化的包布局(Standard Package Layout)
  9. JDK的OutputStream为什么方法write(int b)的入参类型是int呢?
  10. DataGrid 功能实现收集(一)