• miller rabin 求质数的java实现 浮云


    通常java判断质数,只需用BigInteger.nextProbablePrime()方法就行了。这里记录miller rabin 的一种java实现。

    View Code
     1 public class MillerRabin{
    2 public static void main(String[] args) {
    3 int p = 7, p2 = p - 1;
    4 boolean flag = true;
    5 int k, i, j = 0;
    6 k = (int) (Math.log(p) / Math.log(2)) + 1;
    7 int a[], b[], c[];
    8 c = new int[5];// 用来生成5个检测数
    9 a = new int[k];
    10 b = a;
    11
    12 // 把P转化为2进制
    13 for (i = 0; p2 > 0; i++) {
    14 a[i] = p2 % 2;
    15 p2 /= 2;
    16 }
    17 for (i--; i >= 0; j++, i--) {
    18 b[j] = a[i];
    19 }
    20
    21 for (int r = 0; r < a.length; r++) {
    22 System.out.print(a[r]);
    23 }
    24 for (int m = 0; m < 5; m++) { // //5次WITNESS(a[i],P)测试P的素数
    25 c[m] = (int) (Math.random() * (p - 3)) + 2;
    26 System.out.println("\n" + c[m]);
    27 if (witness(c[m], p, b) == 0) {
    28 flag = false;
    29 }
    30 }
    31
    32 if (flag)
    33 System.out.println("Prime! " + p);
    34 else
    35 System.out.println("not Prime! " + p);
    36
    37 }
    38
    39 private static int witness(int a, int n, int[] b) {
    40 int x, k;
    41 int d = 1;
    42 k = b.length - 1;
    43 for (int m = k; m >= 0; m--) {
    44 x = (int) d;
    45 d = (d * a) % n;
    46 if ((d == 1) && (x != 1) && (x != n - 1))
    47 return 1;
    48 if (b[m] == 1)
    49 d = (d * a) % n;
    50 }
    51 if (d != 1){
    52 System.out.println("a:"+a+" n:"+n);
    53 return 0;
    54 }
    55 return 1;
    56 }
    57
    58 public static void witness(int t) {
    59 BigInteger bi = new BigInteger(""+(t-1)+"");
    60 if(bi.nextProbablePrime().intValue()==t){
    61 System.out.println(t+" is prime!");
    62 }else{
    63 System.out.println(t+" is not prime!");
    64 }
    65 }
    66 }
  • 相关阅读:
    队列(queue)、优先队列(priority_queue)、双端队列(deque)
    20150720工作总结
    Spring使用远程服务之Hessian
    iBaits中SqlMapClientTemplate的使用
    java中常见的异常类
    java笔试面试中的坑
    java面试中常用的排序算法
    IBatis和Hibernate区别
    单例和多线程
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/mignet/p/miller_rabin.html
Copyright © 2020-2023  润新知