扩欧学习笔记
扩展欧几里得?什么鬼?
扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)。通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a 与 b, 必存在有整数 x 与 y 使得\(ax + by = \gcd(a,b)\)。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到\(ax+by=\gcd(a,b)\)的整数解。
 ——摘自百度百科
简单来说,就是求满足\(ax+by=\gcd(a,b)\)的最小整数\(x\)的值
求解
- 
一、由特解求通解
设有特解\(x_0,y_0\)
则通解为\(x=x_0+t,y\)
\(\because ax_0+by_0=\gcd(a,b),ax+by=\gcd(a,b)\)
\(\therefore ax_0+by_0=ax+by\)
\(\therefore ax_0+by_0=a(x_0+t)+by\)
化简得\(y=y_0-\frac{a}{b}t\)
\(\because y,y_0 \in \mathbb{Z}\)
\(\therefore \frac{a}{b}t\in\mathbb{Z}\)
\(\therefore \frac{a/\gcd(a,b)}{b/\gcd(a,b)}t\in\mathbb{Z}\)
\(\therefore t=\frac{b}{\gcd(a,b)}k\)
\(\therefore x=x_0+\frac{b}{\gcd(a,b)},y=y_0+\frac{a}{gcd(a,b)}\)
 - 
二、求特解
先看辗转相除法
\(\gcd(a,b)=\gcd(b,a\mod b)\)
\(\because ax+by=\gcd(a,b),bx_1+(a\mod b)y_1=\gcd(b,a\mod b)\)
则一定有\(ax+by=bx_1+(a\mod b)y_1\)
\(\therefore\)该式可变形为\(ax+by=bx_1+(a-\lfloor\frac{a}{b}\rfloor*b)y_1\)
化简得\(ax+by=ay_1+b(x_1-\lfloor\frac{a}{b}\rfloor*y_1)\)
\(\therefore x=y_1,y=x_1-\lfloor\frac{a}{b}\rfloor*y_1\)
这不还是求不出吗
递归求就行
如:
\(72x+46y=\gcd(72,46)\downarrow\)
\(46x+26y=gcd(46,26)\downarrow\)
\(26x+20y=\gcd(26,20)\downarrow\)
\(20x+6y=gcd(20,6)\downarrow\)
\(6x+2y=\gcd(6,2)\downarrow\)
\(2x+0y=\gcd(2,0)\)
此时,\(b=0\),开始回溯,将\(x=1,y=\forall\)即可(以\(y=0\)为例)
\(a=2,b=0,x=1,y=0\downarrow\)
\(a=6,b=2,x=0,y=1\downarrow\)
\(a=20,b=6,x=1,y=-3\downarrow\)
\(a=26,b=20,x=-3,y=4\downarrow\)
\(a=46,b=26,x=4,y=-7\downarrow\)
\(a=72,b=46,x=-7,y=11\)
 - 
三、代码
什么,这不只要\(ctrl+c,ctrl+v\)吗\(Code:\)
void exgcd(int a,int b,int &x,int &y){ if(!b){ x=1,y=0; return ; } exgcd(b,a%b,x,y); int tp=x; x=y,y=t-a/b*y; } 
让我们来个扩展,也就是扩展扩展欧几里得
求满足\(ax+by=c\)的最小整数解\(x\)
好吧,其实这道题和刚在那道题是一样的
让我们来康康:
\(ax+by=c(c≠0)\downarrow\)
\(\frac{a}{c}x+\frac{b}{c}y=1\downarrow\)
\(\frac{a*\gcd(a,b)}{c}x+\frac{b*\gcd(a,b)}{c}y=\gcd(a,b)\)
是不是和之前那个长得很像?
那我们再像一点:
\(a(\frac{gcd(a,b)}{c}x)+b(\frac{gcd(a,b)}{c}y)=gcd(a,b)\)
还能再像?
我们设\(m=\frac{gcd(a,b)}{c}x,n=\frac{gcd(a,b)}{c}y\)
\(\therefore\)原式变为\(am+bx=gcd(a,b)\)
是不是一样了?
我们用之前的方法求出\(m,n\)的值
易知\(x=\frac{cm}{\gcd(a,b)},y=\frac{cn}{\gcd(a,b)}\)

                
            
        
浙公网安备 33010602011771号