elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Metodo eficiente para poder factorizar un numero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Metodo eficiente para poder factorizar un numero  (Leído 6,670 veces)
Tronos154

Desconectado Desconectado

Mensajes: 79


Invictus maneo


Ver Perfil
Metodo eficiente para poder factorizar un numero
« en: 16 Febrero 2016, 21:32 pm »

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
  1. public class Factorizar {
  2.  
  3.    public static ArrayList<BigInteger> Factorizar(BigInteger modulo) {
  4.  
  5.        BigInteger ONE = BigInteger.ONE;
  6.        BigInteger ZERO = BigInteger.ZERO;
  7.        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.
  8.  
  9.        ArrayList<BigInteger> almacenFactores = new ArrayList<>();
  10.        int cont1 = 0;
  11.        int cont2 = 0;
  12.        int certainty = 100; //Revisar el valor que toma el certanity.
  13.  
  14.        while (modulo != ONE) {
  15.  
  16.            if (modulo.isProbablePrime(certainty)) {
  17.  
  18.                almacenFactores.add(cont2, modulo);
  19.                return almacenFactores;
  20.  
  21.            }
  22.  
  23.            if ((modulo.remainder(primosBig[cont1])) == ZERO) {
  24.  
  25.                modulo = modulo.divide(primosBig[cont1]);
  26.                almacenFactores.add(cont2, primosBig[cont1]);
  27.                cont1 = 0;
  28.                cont2++;
  29.  
  30.            } else {
  31.  
  32.                cont1++;
  33.            }
  34.  
  35.        }
  36.        return almacenFactores;
  37.  
  38.    }
  39. }


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines