El método de factorización de Euler es una técnica para factorizar un número escribiéndolo como suma de dos cuadrados de dos formas diferentes. Por ejemplo, el númerose puede escribir comoo comoy el método de Euler da la factorización.
La idea de que dos representaciones distintas de un entero positivo impar pueden dar lugar a una factorización fue aparentemente propuesta por primera vez por Marin Mersenne . Sin embargo, no se utilizó ampliamente hasta cien años después por Euler. Su uso más célebre del método que ahora lleva su nombre fue factorizar el número , que aparentemente antes se pensaba que era primo aunque no es un pseudoprimo según ninguna prueba de primalidad importante.
El método de factorización de Euler es más eficaz que el de Fermat para los números enteros cuyos factores no están muy próximos entre sí y potencialmente mucho más eficiente que la división por tanteo si se pueden encontrar representaciones de números como sumas de dos cuadrados con relativa facilidad. Los métodos utilizados para encontrar representaciones de números como sumas de dos cuadrados son esencialmente los mismos que para encontrar diferencias de cuadrados en el método de factorización de Fermat .
La gran desventaja del método de factorización de Euler es que no se puede aplicar a la factorización de un número entero con cualquier factor primo de la forma 4 k + 3 que aparezca elevado a una potencia impar en su factorización prima, ya que dicho número nunca puede ser la suma de dos cuadrados. Los números compuestos pares impares de la forma 4 k + 1 suelen ser el producto de dos primos de la forma 4 k + 3 (por ejemplo, 3053 = 43 × 71) y, de nuevo, no se pueden factorizar con el método de Euler.
Esta aplicabilidad restringida ha hecho que el método de factorización de Euler no sea el preferido para los algoritmos de factorización informática , ya que cualquier usuario que intente factorizar un entero aleatorio es poco probable que sepa si el método de Euler puede realmente aplicarse al entero en cuestión. Hace relativamente poco tiempo que ha habido intentos de desarrollar el método de Euler en algoritmos informáticos para su uso en números especializados en los que se sabe que el método de Euler puede aplicarse.
La identidad de Brahmagupta-Fibonacci establece que el producto de dos sumas de dos cuadrados es una suma de dos cuadrados. El método de Euler se basa en este teorema, pero puede considerarse como el inverso, dado que encontramos como un producto de sumas de dos cuadrados.
Primero deduzcamos que
y factoriza ambos lados para obtener
Sea ahora y de modo que existan algunas constantes que satisfagan
Sustituyendo estos en la ecuación (1) obtenemos
La cancelación de factores comunes da como resultado
Ahora, utilizando el hecho de que y son pares de números relativamente primos, encontramos que
Entonces
Ahora vemos eso y
Aplicando la identidad de Brahmagupta-Fibonacci obtenemos
Como cada factor es una suma de dos cuadrados, uno de ellos debe contener ambos números pares: o bien o . Sin pérdida de generalidad, supongamos que el par es par. La factorización se convierte entonces en
Desde:
Tenemos de la fórmula anterior:
De este modo,
función Euler_factorize(int n) -> lista[int] si es_primo(n) entonces print("El número no es factorizable") función de salida bucle for desde a=1 hasta a=techo(sqrt(n)) b2 = n - a*a b = piso(raíz cuadrada(b2)) si b*b==b2 romper bucle conservando a,b si a*a+b*b!=n entonces print("No se pudo encontrar ninguna expresión para n como suma de cuadrados") función de salida bucle for desde c=a+1 hasta c=techo(sqrt(n)) d2 = n - c*c d = piso(raíz cuadrada(d2)) si d*d==d2 entonces romper bucle conservando c,d si c*c+d*d!=n entonces print("No se pudo encontrar una segunda expresión para n como suma de cuadrados") función de salida A = ca, B = c+a C = bd, D = b+d k = MCD(A,C)//2, h = MCD(B,D)//2 l = MCD(A,D)//2, m = MCD(B,C)//2 factor1 = k*k + h*h factor2 = l*l + m*m devolver lista[ factor1, factor2 ]