首页 > 编程语言 >pollard_rho大数分解Java版

pollard_rho大数分解Java版

时间:2023-05-31 23:33:34浏览次数:42  
标签:BigInteger Java divisor pollard xx static rho new mod


代码:



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);
    }
}





标签:BigInteger,Java,divisor,pollard,xx,static,rho,new,mod
From: https://blog.51cto.com/u_16146153/6391076

相关文章

  • 3、实战案例:部署基于JAVA的博客系统JPress
    官方网站:http://www.jpress.io/安装包下载第一步:[root@ubuntu2004]#mkdir/data/jpress/-p创建网站数据存放的目录,ROOT可以不建把下载好的包拉进/data/jpress/目录,并改名为ROOT.war,它会自动解压成一个ROOT文件夹[root@ubuntu2004jpress]#rz-Erzwaitingtoreceive.[root@......
  • [SprigMVC/SpringBoot] JSON序列化专题之日期序列化问题:接口报Jackson框架错误“Inva
    0序言今日工作中遇到的一个bug。各位看官且听我娓娓道来。1问题描述请求接口时,service层返回到controller层的数据结构为List<Map<Strig,Object>>,而Map中存在一个key=date,valuetype=java.time.LocalDate的Entry,且日志报如下错误:InvalidDefinitionException:Java8date......
  • Java中序列化和反序列化解释
    在Java中,序列化(Serialization)是指将对象的状态转换为字节流的过程,以便将其保存到文件、在网络中传输或持久化到数据库中。而反序列化(Deserialization)则是将字节流转换回对象的过程,恢复对象的状态。序列化和反序列化主要用于以下场景:1.对象持久化:通过序列化,可以将对象的状态保存......
  • 学习JavaSE基础-day1
    JRE和JDKJRE:Java运行环境,如果想要运行Java程序至少要安装JREJDK:Java开发环境(开发工具包),如果要开发Java程序,必须安装JDKJRE=JVM+核心类库JDK=JRE+开发工具包JDK>JRE>JVM关系如图所示: JDK下载地址:www.oracle.com配置Path环境变量:希望可以在命令窗口的任意的......
  • Java开发必备软件合集
    IDEA安装详情,包含激活教程,和相关配置教程。IDEA安装配置步骤详解 IntelliJIDEA中有什么让你相见恨晚的技巧IDEA快捷键大全 Navicat安装教程,激活教程navicat介绍(包含安装指导) IDEAvsEclipse:使用体验对比IDEA对比 【待更新】......
  • 【Java】线程池配置
     先看JUC包自带的一个资源线程池执行器:初始化参数如下ThreadPoolExecutorthreadPoolExecutor=newThreadPoolExecutor(corePoolSize,//核心线程数量maximumPoolSize,//峰值线程数量keepAliveTime,//保留时限,当线程数量超出峰值数量时,保......
  • 【随手记录】关于Java字符串长度
    在java当中,在运行期间,字符串的长度是有最大限制的:21亿,也就是4GB;在编译期间,字符串的长度最大为:65534。字符串的内容是由一个字符数组char[]来存储的,由于数组的长度及索引是整数,Integer的最大范围是2^31-1,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB=(2*2^31-......
  • Java并发之原子性、可见性和有序性
    1.原子性1.1原子性的定义原子性:原子性即是一个或者多个操作,要么全程执行,并且执行的过程中不被任何因素打断,要么全部不执行。举个例子会更好理解:就像是我们去银行转账的时候,A给B转1000元,如果A的账户减少了1000之后,那么B的账户一定要增加1000。A的账户减钱,B的账户加钱,这两个操作......
  • Java 微服务中的聚合器设计模式示例
    微服务架构中的聚合器设计模式是一种设计模式,用于通过聚合多个独立的微服务的响应来组成一个复杂的服务。它也是与SAGA、CQRS和EventSourcing一起的基本微服务设计模式之一。当客户端请求需要跨多个微服务分布的数据或功能时,此模式是合适的。可以提高系统的性能和可扩展性通过允许......
  • 揭开 JavaScript 事件循环的神秘面纱
    Javascript是一种单线程语言,这意味着它一次只能执行一个任务。但是,它仍然设法同时执行多项任务。它通过使用一些复杂的数据结构给人一种多线程的错觉。为实现这一点,Javascript引擎有一个称为事件循环的重要组件。我们将了解什么是事件循环以及它如何在不阻塞主线程的情况下处理异......