扩展欧几里得细节补充

一.百度百科的定义:

    对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然

    存在整数对 x,y ,使得 gcd(a,b)=ax+by。

    这说明两点

   1.贝祖等式中,a,b必须都要大于0

   2.a,b中允许有一个为0

 

二.当a,b中有一个为负数的处理办法

三.应用

摘自博客https://blog.csdn.net/weixin_42165981/article/details/81185418

应用一:求解乘法逆元(A和MOD互素的时候才存在,否则不存在逆元)

应用二:求解ax=c(mod b)(也就是ax+by=c(同上逆元的变化方式))的x的最小整数解

  ax=c(mod b)可以转化为ax+by=c。(变化的方式同求逆元的时候的变化。)

我们可以用扩展欧几里得算法得出ax+by=gcd(a,b) 的一组解(x1,y1),那么其他解呢?任取另一组解(x2,y2),则ax1+by1=ax2+by2(因为它们都等于gcd(a,b) ),变形得a(x1-x2)=b(y2-y1)。假设gcd(a,b)=g,方程左右两边同时除以g(如果g=0,说明a或b等于0,可以特殊判断),得a'(x1-x2)=b'(y2-y1),其中a'=a/g,b'=b/g。注意,此时a'和b'互素(想想分数的化简),则因此x1-x2一定是b'的整数倍(因为a'中不包含b',所以x1-x2一定包含b')。设它为kb',计算得y2-y1=ka'。注意,上述的推导过程并没有用到“ax+by的右边是什么”,因此得出以下结论:

设a,b,c为任意整数,若方程ax+by=c的一组解是(x0,y0),则它的任意整数解都可以写成(x0+kb',y0-ka'),其中a'=a/gcd(a,b),b'=b/gcd(a,b),k取任意整数。

这样我们就可以求出来最小的整数解了。(先用扩展欧几里得算法求出一组解,然后进行变换)。
 

应用三:直线上的整数点。在平面坐标系下,ax+by=c是一条直线方程。知道一个点,我们就可以用应用二中的方法去求直线上的所有整数点

猜你喜欢

转载自blog.csdn.net/qq_39861441/article/details/89134054