Java 蛮力大整数分解

Java 蛮力大整数分解,java,primes,biginteger,brute-force,factorization,Java,Primes,Biginteger,Brute Force,Factorization,正如你从标题中所看到的,我正在努力对因子为2个素数的大整数进行因子分解。我想知道是否有一种方法可以在for循环中使用for循环。我知道这是一个可怕的方式做它,但我想做它无论如何。(我本来打算使用费马分解定理,但如果没有额外的方法/库,你就不能求大整数,我也做不到),所以试试看你是否能帮我做这件事。大致如下: BigInteger n = new BigInteger("270653957405596110781"); // this is what i need the factors of

正如你从标题中所看到的,我正在努力对因子为2个素数的大整数进行因子分解。我想知道是否有一种方法可以在for循环中使用for循环。我知道这是一个可怕的方式做它,但我想做它无论如何。(我本来打算使用费马分解定理,但如果没有额外的方法/库,你就不能求大整数,我也做不到),所以试试看你是否能帮我做这件事。大致如下:

BigInteger n = new BigInteger("270653957405596110781");  // this is what i need the factors of
BigInteger TWO = new BigInteger("2");
for( BigInteger i = new BigInteger("1"); i < n.divide(TWO); i.nextProbablePrime() ){
    for( BigInteger k = new BigInteger("1"); k < n.divide(TWO); k.nextPossiblePrime){
        if(i.Multiply(k) = n){
            //i and k are the factors, and return them
        }
     }
 }
biginger n=新的biginger(“270653957405596110781”);//这就是我需要的因素
BigInteger二=新的BigInteger(“2”);
for(biginger i=newbiginger(“1”);i
很明显,这太可怕了,我知道你不能通过说i.nextPossiblePrime()来增加到下一个素数,你需要它说i=i.nextPossiblePrime,我只是告诉你我希望它如何工作;但这就是为什么我要问,因为idk这样的事情是否可能

请让我知道,如果这条路线是可能的,我如何才能修复这个坏代码的功能,就像我是可视化的

谢谢

我拒绝“只是帮你做你正在做的事情。”这是行不通的

我谦虚地在我的博客上推荐这篇文章。这里讨论的pollard rho算法将毫不费力地计算出您的数字。其中包括一个使用BigInteger的java实现

顺便说一下,270653957405596110781=7588940707*35664260383。

我拒绝“只是帮你做你正在做的事情。”这样做行不通

我谦虚地在我的博客上推荐这篇文章。这里讨论的pollard rho算法将毫不费力地计算出您的数字。其中包括一个使用BigInteger的java实现


顺便说一句,270653957405596110781=7588940707*35664260383。

我对计算机科学还是相当陌生(8个月),这是我第一次回答问题,如果我帮不了什么忙,很抱歉。如果我错了,请纠正我(说真的,我正在努力学习),但我认为你要找的是二次筛。你似乎比我更先进,但我用了一天的时间就实现了。它在分解大数方面非常有效

我不知道Fermat的因式分解方法,但是你能不能把BigInteger继承到一个新的类中,并用一个平方根函数来实现它?我不知道你需要什么样的准确度,但你可以用BigDecimal来代替

希望这是有帮助的


编辑:我猜你没有测试你的代码。不能将<之类的运算符与BigInteger一起使用。你需要使用BigInteger.compareTo(BigInteger)

我对计算机科学还是相当陌生(8个月),这是我第一次回答问题,如果我帮不上什么忙,那么很抱歉。如果我错了,请纠正我(说真的,我正在努力学习),但我认为你要找的是二次筛。你似乎比我更先进,但我用了一天的时间就实现了。它在分解大数方面非常有效

我不知道Fermat的因式分解方法,但是你能不能把BigInteger继承到一个新的类中,并用一个平方根函数来实现它?我不知道你需要什么样的准确度,但你可以用BigDecimal来代替

希望这是有帮助的


编辑:我猜你没有测试你的代码。不能将<之类的运算符与BigInteger一起使用。你需要使用BigInteger。compareTo(BigInteger)

谢谢你的提示,但我真的只是想知道我所说的方法是否可行,我真的无法从你的文章中复制所有代码并使用它。虽然谢谢你的链接谢谢你的提示但我真的只是想知道我所说的方式是否可行,我真的无法从你的文章中复制所有代码并使用它。尽管感谢linkbrute force分解,但无论它应用于大整数还是正则整数,都是相同的算法。您可以找到它的伪代码,例如,或一个工作的Java代码。蛮力分解是相同的算法,无论它是应用于大整数还是常规整数。您可以找到它的伪代码,例如,或工作的Java代码。