Metodo eficiente para poder factorizar un numero

Iniciado por Tronos154, 16 Febrero 2016, 21:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Tronos154

Buenas,como no he encontrado ningún foro de matemáticas en esta web he deducido que debía postear mi duda aquí,he estado trabajando en un programa en java para cifrar en RSA un texto dado,hasta aquí todo bien,el problema es que cuando hay que factorizar el numero hallado de multiplicar los dos números primos el proceso es muy costoso de la forma en que lo he planteado.Mi pregunta es,¿existe algún algoritmo para factorizar un numero dado?,dejo el método en Java que he creado para factorizar,pero este no es del todo eficiente ya que falla para números muy altos.

Código (java) [Seleccionar]
public class Factorizar {

   public static ArrayList<BigInteger> Factorizar(BigInteger modulo) {

       BigInteger ONE = BigInteger.ONE;
       BigInteger ZERO = BigInteger.ZERO;
       BigInteger primosBig[] = ArrayPrimos.ArrayPrimos(); // Crea una lista de arrays con los numeros primos que hay desde el 2 hasta el 1000000 para poder factorizar el BigInteger.

       ArrayList<BigInteger> almacenFactores = new ArrayList<>();
       int cont1 = 0;
       int cont2 = 0;
       int certainty = 100; //Revisar el valor que toma el certanity.

       while (modulo != ONE) {

           if (modulo.isProbablePrime(certainty)) {

               almacenFactores.add(cont2, modulo);
               return almacenFactores;

           }

           if ((modulo.remainder(primosBig[cont1])) == ZERO) {

               modulo = modulo.divide(primosBig[cont1]);
               almacenFactores.add(cont2, primosBig[cont1]);
               cont1 = 0;
               cont2++;

           } else {

               cont1++;
           }

       }
       return almacenFactores;

   }
}