欧几里德和扩展欧几里德算法

欧几里德算法:
用途: 得到两个数的最大公约数
公式: g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b)
证明: g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b)

  1. 证明 a , b a,b 的公约数一定是 b , a % b b,a\%b 的公约数:
    因为 a % b = a a b × b a\%b=a-\lfloor \frac{a}{b} \rfloor \times b ,这里设 c = a b c=\lfloor \frac{a}{b} \rfloor
    对于 a , b a,b 的任意公约数 d d ,有 d a , d b d|a,d|b ,必然有 d ( a x + b y ) d|(ax+by)
    所以 d b , d ( a c × b ) d|b,d|(a-c\times b) 必然成立,即 a , b a,b 的公约数一定是 b , a % b b,a\%b 的公约数
  2. 证明 b , a % b b,a\%b 的约数数一定是 a , b a,b 的公约数:
    因为 a % b = a a b × b a\%b=a-\lfloor \frac{a}{b} \rfloor \times b ,这里设 c = a b c=\lfloor \frac{a}{b} \rfloor
    对于 b , a c × b b,a-c\times b 的任意公约数 d d ,有 d b , d ( a c × b ) d|b,d|(a-c\times b)
    所以必然有 d ( a c × b + c × b ) = d a , d b d|(a-c\times b + c\times b)=d|a,d|b ,即 b , a % b b,a\%b 的公约数一定是 a , b a,b 的公约数

所以 a , b a,b 的公约数集合与 b , a % b b,a\%b 的公约数集合一致,所以 g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b)
代码:

int gcd(int a, int b) {
	return b == 0 ? a : gcd(b, a % b);
}

扩展欧几里德算法:
定义: 对于 a a b b ,一定存在 a x + b y = g c d ( a , b ) ax+by=gcd(a,b)
代码:

void exgcd(int a, int b, int &x, int &y) {
	if(!b) {
		x = 1;
		y = 0;
		return ;
	}
	exgcd(b, a % b, y, x);
	y -= a / b * x;
}

得到的 x = x 0 , y = y 0 x=x_0,y=y_0

通解: x = x 0 + k × b g c d ( a , b ) , y = y 0 k × a g c d ( a , b ) x=x_0+k\times \frac{b}{gcd(a,b)},y=y_0-k\times \frac{a}{gcd(a,b)}
通解证明:
d = g c d ( a , b ) d = gcd(a,b)
a x 0 + b y 0 = d ax_0+by_0=d
a x + b y = a ( x 0 + k × b d ) + b ( y 0 k × a d ) = a x 0 + b y 0 + k a b d k a b d ax+by=a(x_0+k\times \frac{b}{d})+b(y_0-k\times \frac{a}{d})=ax_0+by_0+\frac{kab}{d}-\frac{kab}{d}
= a x 0 + b y 0 = d =ax_0+by_0=d

证明代码中的部分: y = y a / b × x y = y - a / b \times x
证明:
e x g c d ( b , a % b , y , x ) exgcd(b,a\%b,y,x) 得到:
b y + ( a % b ) x = d by+(a\%b)x=d
b y + ( a a b × b ) x = d by+(a-\lfloor \frac{a}{b} \rfloor \times b)x=d
a x + b ( y a b x ) = d ax+b(y-\lfloor \frac{a}{b} \rfloor x)=d
那么得到的就是 x x 不变, y = y a / b × x y=y-a/b\times x

猜你喜欢

转载自blog.csdn.net/weixin_43900869/article/details/106959343