Bezu Teorema: Si ab es un número entero, entonces no debe ser un número entero tal que xy ax + by = gcd (a, b)
Es decir, si ax + by = c resoluble, a continuación, c debe ser un múltiplo de gcd (c necesariamente divisible por gcd, c% gcd == 0)
Si ax + by = 1 tiene una solución, entonces el gcd (a, b) = 1.
Euclides fue eliminado dividido por la búsqueda del máximo común divisor ab
gcd (a, b) = mcd (b, a% b)
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
ax + by = gcd (a, b) resoluble
límite Recursive cuando b = 0, a = devuelve la función gcd una es decir a * 1 (1,0) cuando el conjunto de soluciones para alcances de contorno recursiva + b * 0 = gcd
Recursive es decir gcd no cambia con el número de capas varía gcd recursiva (a, b) = mcd (b, a% b) en un proceso recursivo
AX1 + by1 = gcd = bx2 + (a b%) y2
Simultánea (a / b) * b + a% b = a para dar
x1 = y2, y1 = X2- (a / b) y2 en este momento para establecer una relación entre esta capa y la siguiente capa de recursión, y1 x1 es esta solución capa, x2, y2 son la solución siguiente capa
// ax+by=gcd
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;
return a;
}
int g=exgcd(b,a%b,x,y);
int x2=x,y2=y;
x=y2;
y=x2-(a/b)*y2;
return g;
}
Puede ser expandido euclidiana algoritmo ax + por un conjunto de soluciones (x0, y0) por = gcd puede ser negativo. Entonces, ¿cómo solución general se obtiene mediante la solución especial
x0 Supongamos + s1, y0-s2 otro conjunto de ecuaciones para la solución de la original, el ax0 simultánea + by0 = gcd tener un * s1 = b * s2
s1 / s2 = b / a / gcd con a / gcd s1 orden primo por b y s2 se lleva a un valor mínimo, s1 = b / mcd, s2 = a / gcd
Solución se obtiene a través de la ecuación x = x0 + b / mcd * k y = y0-a / mcd * k k es un número entero
x es la solución entero no negativo más pequeño (x% (b / mcd) + b / mcd) / (b / mcd)
Si gcd = 1 ab prime es decir, la fórmula se puede simplificar