En teoría de números computacionales , el algoritmo de Cornacchia es un algoritmo para resolver la ecuación diofántica , donde d y m son primos entre sí . El algoritmo fue descrito en 1908 por Giuseppe Cornacchia. [1]
Primero, encuentre una solución para (quizás usando un algoritmo que se menciona aquí ); si no existe, no puede haber una solución primitiva para la ecuación original. Sin pérdida de generalidad, podemos suponer que r 0 ≤ metro/2 (si no, entonces reemplace r 0 con m - r 0 , que seguirá siendo una raíz de - d ). Luego use el algoritmo euclidiano para encontrar,y así sucesivamente; deténgase cuando. Sies un entero, entonces la solución es; de lo contrario, intente con otra raíz de - d hasta que se encuentre una solución o se hayan agotado todas las raíces. En este caso no hay una solución primitiva.
Para encontrar soluciones no primitivas ( x , y ) donde mcd( x , y ) = g ≠ 1 , tenga en cuenta que la existencia de dicha solución implica que g 2 divide a m (y, equivalentemente, que si m no tiene cuadrados , entonces todas las soluciones son primitivas). Por lo tanto, el algoritmo anterior se puede utilizar para buscar una solución primitiva ( u , v ) para u 2 + dv 2 = metro/g 2 . Si se encuentra dicha solución, entonces ( gu , gv ) será una solución a la ecuación original.
Resuelve la ecuación . La raíz cuadrada de −6 (mod 103) es 32, y 103 ≡ 7 (mod 32); como y , hay una solución x = 7, y = 3.