加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

pollard_rho大数分解Java版

发布时间:2020-12-14 04:03:49 所属栏目:大数据 来源:网络整理
导读:代码: 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

代码:


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;

        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 = BigInteger.valueOf(120);
        factor(N);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读