factorizacion de fermat
TRANSCRIPT
Factorización de Fermat
Jose Jaime Rodriguez Hernandez Cristina Gonzalez Moreira
Carlos Joaquin Brito Abundiz
La factorización de Fermat no se basa en los
factores primos, sino en representar un número impar N como una diferencia de dos cuadrados y después expresar la misma como el producto de una suma por una diferencia, con lo que se logra la factorización:
Definición
Se buscan dos enteros x e y de tal forma que
n = a2 – b2
Como N = (x + y)(x - y), salvo que x - y = 1, tenemos una factorizacion de N
Definición -2
A continuación se presentara el corrimiento
manual …
Ejemplo
public static String doFermat(double n) { double x = Math.ceil(Math.sqrt(n)); double b2 = (x * x) - n; double temp1 = 0; double temp2 = 0; double raiz = Math.sqrt(b2); int i = 1; System.out.println(" a = \t" + x); System.out.println(" b2 = \t" + b2); System.out.println(" raíz = \t" + raiz); while ((raiz - (Math.floor(raiz))) != 0) { x = x + 1; b2 = (x * x) - n; raiz = Math.sqrt(b2); System.out.println("\nIteracion [" + i + "]\n"); System.out.println(" a = \t" + x); System.out.println(" b2 = \t" + b2); System.out.println(" raíz = \t" + raiz); System.out.println("----------------------"); i = i + 1; } temp1 = x - Math.sqrt(b2); temp2 = x + Math.sqrt(b2); return "X1 = " + temp1 + "\tX2 = " + temp2; }}
Código
El algoritmo anterior tiene orden de
complejidad exponencial, O(n) En el caso n = pq donde p y q son dos primos
cercanos, y como consecuencia cercanos a raíz de n, es sin embargo muy rápido.
Por tanto, en el RSA, como en el sistema de
Rabin es conveniente que p y q no sean de la misma longitud
Con esta precaución el método de Fermat es impractible debido al alto número de iteraciones que precisaría.
En la práctica se debe usar limitando el número de iteraciones, para evitar que parar el proceso por medios drásticos.