1. Jose Jaime Rodriguez Hernandez
Cristina Gonzalez Moreira
Carlos Joaquin Brito Abundiz
2.
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
3.
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
6.
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
7.
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.
8.
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.