欧几里德及其拓展和应用

  • 欧几里德定理求最大公约数:
Datatype Gcd(Datatype  a, Datatype  b){
         return (b == 0 ? a : Gcd (b, a%b));
}

运用的原理为辗转相除

Gcd(a, b) == Gcd (b, a) == Gcd(-a, b) == Gcd(|a|, |b|)

 

  • 拓展欧几里得定理:

求解方程ax + by = Gcd(a, b);

int Gcd_value = 0, x = 0, y = 0; //Gcd_value为a,b的最大公约数

int exGcd(int a, int b, int &Gcd_value, int &x, int &Y){
        if (b == 0){
             x = 1;
             y = 0;
             Gcd_value = a;
        }
        else{
             exGcd(b, a%b, Gcd_value, x, y);
             int temp = x;
             x = y;
             y = tm - y*(a/b);
        }
}

 

证明:

当a != 0且b == 0,Gcd(a, b) = a,则ax + by = a ==> x = 1且y =0;

a*b!= 0时,Gcd(a, b) == Gcd (b, a%b);

则有 ax1 + by1 = Gcd(a, b) = Gcd (b, a%b) = bx2 + (a%b)y2;

将右边变形:b*x2 + (a%b)*y2 = b*x2 + (a –[a/b]*b)*y2 = b*x2 + a*y2 – b*y2*[a/b] = a*y2 + b*(x2 - y2*[a/b]);

则有 ax1 + by1 = a*y2 + b*(x2 - y2*[a/b]) ==> x1 = y2 且 y1 = x2 - y2*[a/b];

故采用递归的方法直到找到 b==0 时的情况,即 xn = 1 且 yn = 0,然后回溯赋值给xn-1,yn-1,然后继续回溯......直到找到x0,y0 !

此时就有 a*x0 + b*y0 = Gcd(a, b) ==> a*(x0 + T*b) + b(y0 - T*a) = Gcd(a, b);

则有 通解 x = x0 + T*b,y = y0 - T*a(T为任意整数,即 ····,-2,-1,0,1,2,······);

 

  • 运用拓展欧几里德求解 ax + by = c:

首先有如下结论,(我不知道怎么来的)

ax + by = c 有解 c%Gcd(a, b) == 0 否则 方程无解;

下面求解:

上面我们得到了 ax + by = Gcd(a, b) 的初始解,x0y0

p = c/Gcd(a, b) => c = p*Gcd(a, b);

联立方程: a*x + b*y = Gcd(a, b) 与 a*xx + b*yy = c = p*Gcd(a, b);

则可得 a*(xx/p) + b*(yy/p) = Gcd(a, b)  则可推出通解: 

xx = x*p = x*c/Gcd(a, b);

yy = y*p = y*c/Gcd(a, b);

 

  • 运用拓展欧几里德求乘法逆元:
例如:4关于模7的乘法逆元为多少?
4X≡1 mod 7
这个方程等价于求一个X和K,满足
4X=7K+1
其中X和K都是整数。
若ax≡1 mod f, 则称a关于模f的乘法逆元为x。也可表示为ax≡1(mod f)。
 
当a与f互素时,a关于模f的乘法逆元有唯一解。如果不互素,则无解。
如果f为素数,则从1到f-1的任意数都与f互素,即在 1到 f-1 之间都恰好有一个关于模f的乘法逆元。
 
例如,求5关于模14的乘法逆元:
14=5*2+4
5=4+1
说明5与14互素,存在5关于14的乘法逆元。
1=5-4=5-(14-5*2)=5*3-14
因此,5关于模14的乘法逆元为3。
 
其求法可运用拓展欧几里德原理。
求 ax≡1 mod b 中的x值相当于 求解 ax - by = 1,将负号并入 y 中则有 ax + by = 1,其中 Gcd(a, b) == 1(因其互质),则我们就可以运用拓展欧几里德原理解出x,y的基础解,然后通过求解通解的方式找到 1 <= x < b 的值,此值即为 a关于模b的乘法逆元! 

posted on 2014-02-26 22:09  圣手摘星  阅读(174)  评论(0编辑  收藏  举报

导航