Java实现的大整数分解Pollard's rho算法程序
2016-05-19 23:45
537 查看
这个程序是从英文版维基百科的链接中看到的。
代码来自PollardRho.java。
程序如下:
代码来自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); } }
相关文章推荐
- spring配置出错at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:244
- ubuntu16.04 jdk1.6.0_45配置
- Spring autowire 自动装配简介
- SpringMVC之DispatcherServlet处理请求详解
- java之ReentrantLock公平锁和非公平锁
- Java Core和HeapDump
- 深入分析 Java 中的中文编码问题(1)
- Java发展历史
- 基于CXF Servlet方式发布Restful的Web服务(入门篇)
- 包装类
- Java编码浅析(注意区分三个概念)(转)
- 第一章 答疑摘选
- java-ThreadLocal是解决线程安全问题
- 说说eclipse调优,缩短启动时间
- Mybatis_java项目
- Java注册帐号邮箱激活验证实现
- Spring学习(三)IOC控制反转与DI依赖注入
- JavaMai——邮箱验证用户注册
- POJO——简单Java对象
- Windows 下的 Java JDK安装