所以我现在正在研究一个java代码。我已经让它工作得很好,但是任务的重点是让它分解大数字(超过 30 位)。它会这样做,但是它可能需要超过 15 分钟才能完成,这是不好的。我的教授向我保证,我使用的算法适用于高达 2^70 的数字,并且应该在大约五分钟内完成。我一直在尝试想出一种方法来做到这一点(增加 2 而不是 1 等),但我似乎无法弄清楚如何在不跳过某些因素的情况下让它更快地移动。有任何想法吗?我还认为椭圆曲线法会更好,但他告诉我现在不要处理这个问题。
这是我的代码(ps,sqrt 是我自己的函数,但我确信它正在工作):
public String factorizer(BigInteger monster){
System.out.println("monster =" + monster);
String factors = "";
BigInteger top = maths.monsterSqrt(monster);
if(monster.mod(two).equals(0));
BigInteger jump = two;
for(BigInteger bi = two; bi.compareTo(top) <= 0; bi = bi.add(jump)){
while(monster.mod(bi).equals(zero)){
factors += "+" + bi + "";
monster = monster.divide(bi);
jump = one;
}
}
if(monster.compareTo(BigInteger.ONE) == 1){
factors += "+" + monster;
}
return factors;
}