zoukankan      html  css  js  c++  java
  • Java实现的大整数分解Pollard's rho算法程序

    这个程序是从英文版维基百科的链接中看到的。

    代码来自PollardRho.java

    程序如下:

    /******************************************************************************
     *  Compilation:  javac PollardRho.java
     *  Execution:    java PollardRho N
     *  
     *  Factor N using the Pollard-Rho method.
     *
     *  % java PollardRho 44343535354351600000003434353
     *  149
     *  329569479697
     *  903019357561501
     *
     ******************************************************************************/
    
    import java.math.BigInteger;
    import java.security.SecureRandom;
        
    
    class PollardRho {
        private final static BigInteger ZERO = new BigInteger("0");
        private final static BigInteger ONE  = new BigInteger("1");
        private final static BigInteger TWO  = new BigInteger("2");
        private final static SecureRandom random = new SecureRandom();
    
        public static BigInteger rho(BigInteger N) {
            BigInteger divisor;
            BigInteger c  = new BigInteger(N.bitLength(), random);
            BigInteger x  = new BigInteger(N.bitLength(), random);
            BigInteger xx = x;
    
            // check divisibility by 2
            if (N.mod(TWO).compareTo(ZERO) == 0) return TWO;
    
            do {
                x  =  x.multiply(x).mod(N).add(c).mod(N);
                xx = xx.multiply(xx).mod(N).add(c).mod(N);
                xx = xx.multiply(xx).mod(N).add(c).mod(N);
                divisor = x.subtract(xx).gcd(N);
            } while((divisor.compareTo(ONE)) == 0);
    
            return divisor;
        }
    
        public static void factor(BigInteger N) {
            if (N.compareTo(ONE) == 0) return;
            if (N.isProbablePrime(20)) { System.out.println(N); return; }
            BigInteger divisor = rho(N);
            factor(divisor);
            factor(N.divide(divisor));
        }
    
     
        public static void main(String[] args) {
            BigInteger N = new BigInteger(args[0]);
            factor(N);
        }
    }


  • 相关阅读:
    【python+selenium】selenium grid(分布式)
    【python】导入自定义模块
    Maven的配置以及IDEA导入本地Maven
    java历史概述
    JVM 内存调优 与 实际案例
    ConcurrentHashMap实现线程安全的原理
    Request.UrlReferrer详解
    等比例缩放生成缩略图
    JavaEE的ajax入门
    javaee三层架构案例--简单学生管理系统
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564851.html
Copyright © 2011-2022 走看看