Pollard的rho启发式方法用于启发式求解大整数n分解因子,具体要结合导论中来理解,参考代码如下:

package cn.ansj;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(96879);System.out.println(N);factor(N);}
}

执行结果:

96879
3
43
751

Java实现算法导论中Pollard的rho启发式方法相关推荐

  1. Java实现算法导论中Miller-Rabin随机性素数测试

    Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...

  2. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  3. Java实现算法导论中Rabin-Karp字符串匹配算法

    Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...

  4. Java实现算法导论中朴素字符串匹配算法

    朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考: package cn.ansj;public cl ...

  5. Java实现算法导论中反复平方法模取幂

    在众多的加密算法中都需要进行幂的取模运算,比如在RSA算法中需要计算d=ne mod N,我们称之为幂模算法,其中: N=p*q(p,q为大素数) n为加密数据,n<N e为公钥,d为私钥,满足 ...

  6. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)

    基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...

  7. Java实现算法导论中快速傅里叶变换FFT递归算法

    要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...

  8. Java实现算法导论中有限自动机字符串匹配算法

    这里实现了基于有限自动机(Finite Automaton,FA)的模式匹配算法,算法的重点在于利用字符串的前后缀构造模式P的自动机,具体结合导论中的说明来理解,可参考http://www.geeks ...

  9. Java实现算法导论中快速傅里叶变换FFT迭代算法

    要结合算法导论理解,参考:http://blog.csdn.NET/fjssharpsword/article/details/53281889 FFT的迭代实现,可以实现并行电路,和比较网络中的比较 ...

最新文章

  1. ECC-based 算法(ECDSA/ECDH) 新潮算法的原理
  2. wcdma系统随机接入过程的流程图_重庆:降低轨道场景多系统合路互调干扰的研究...
  3. 【Linux系统编程】线程私有数据
  4. 应用程序框架实战三十六:CRUD实战演练介绍
  5. 用 matlab 爬取期刊影响因子
  6. pycharm中配置r语言_【R语言】R语言中的循环
  7. wpf中groupbox有什么用_日语中螃蟹用什么来数?
  8. MacBook外接显示器及相关设置详解(分屏/多屏)
  9. Spinner的setOnItemSelectedListener(
  10. ARM汇编之MOV指令
  11. win10生成https证书步骤
  12. Led智慧照明系统功能
  13. 激光雷达(LDS)技术原理解释及实现过程
  14. Jasper 中文字体
  15. 酷雷曼一站式图片直播,助力品牌高效传播
  16. 【Dash搭建可视化网站】项目10:疫情数据可视化大屏制作步骤详解
  17. 获取手机IMEI信息
  18. ssm基于安卓的健康体检预约系统APP-计算机毕业设计
  19. SAP License:ERP管理系统维护
  20. java: 程序包 javax.smartcardio 不可见 (程序包 javax.smartcardio 已在模块 java.smartcardio 中声明, 但该模块不在模块图中)

热门文章

  1. 一周一论文(翻译)——[SIGMOD 19] Elasticutor:Rapid Elasticity for Realtime Stateful Stream Processing
  2. 计算机网络:WebSocket协议详解
  3. Linux操作系统安装LAMP环境
  4. vb.net連接ACCESS数据库
  5. public、protected、default、private区别
  6. installshield学习笔记
  7. storm流式大数据处理流行吗
  8. petshop 出现没有为 SQL 缓存通知启用数据库“MSPetShop4”
  9. android“设置”里的版本号
  10. MySQL 备份和恢复策略(二)