浅谈扩展欧几里德

题外语:大后天就是复赛了,不负光阴,加油!


扩展欧几里德是一项较为基础的数论专项

定义:一个ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)的式子,a,ba,ba,b为给定的值,求x,yx,yx,y的解
首先,这个式子满足:解一定存在。

回忆我们知道的欧几里德算法,是把gcd(a,b)gcd(a,b)gcd(a,b)转化求解为gcd(b,amod  b)gcd(b,a\mod b)gcd(b,amodb),类比一下,看看扩展欧几里德可不可以运用到这种方法呢?

当然可以。不然为什么叫扩展,数学同题不同问间都有关系


假设我们已经求解出了x1,y1x_1,y_1x1,y1的值,且bx1+(amod  b)y1=gcd(a,b)bx_1+(a\mod b)y_1=gcd(a,b)bx1+(amodb)y1=gcd(a,b)
因为amod  b==a−(a/b)∗ba\mod b==a-(a / b)*bamodb==a(a/b)b
所以等量代换 bx1+[a−(a/b)∗b]y1=gcd(a,b)bx_1+[a-(a / b)*b]y_1=gcd(a,b)bx1+[a(a/b)b]y1=gcd(a,b)
拆个括号,bx1+ay1−(a/b)∗by1=gcd(a,b)bx_1+ay_1-(a/b)*by_1=gcd(a,b)bx1+ay1(a/b)by1=gcd(a,b)
转换: ay1+b[x1−(a/b)y1]=gcd(a,b)ay_1+b[x1-(a/b)y1]=gcd(a,b)ay1+b[x1(a/b)y1]=gcd(a,b)

总觉得有点儿熟悉啊…

ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)

ay1+b[x1−(a/b)y1]=gcd(a,b)ay_1+b[x1-(a/b)y1]=gcd(a,b)ay1+b[x1(a/b)y1]=gcd(a,b)

一模一样

所以x=y1,y=x1−(a/b)y1.x=y1,y=x1-(a/b)y1.x=y1,y=x1(a/b)y1.

递推式就出来了——

1.xn=yn+1,yn=xn+1−(a/b)yn+1x_n=y_n+1,y_n=x_{n+1}-(a/b)y_{n+1}xn=yn+1,yn=xn+1(a/b)yn+1

2.当 bbb000 时,returnreturnreturn aaa因为此时的aaa就是gcdgcdgcd
也就是说,欧几里得算法中gcdgcdgcd部分结束时变量a中存放的是gcd,变量b中存放的是0,因此此时显然有a×1+b×0=gcda\times 1+b\times 0=gcda×1+b×0=gcd成立,此时有x=1,y=0x=1,y=0x=1,y=0成立。

update:2022/03/05:20:43

至于通解

x=x0+lcm(a,b)a,x=x_0+ \frac{lcm(a,b)}{a},x=x0+alcm(a,b),

y=y0−lcm(a,b)by=y_0- \frac{lcm(a,b)}{b}y=y0blcm(a,b)

x=[(x0mod  bgcd(a,b))+bgcd(a,b)]mod  bgcd(a,b)x=[(x_0 \mod \frac{b}{gcd(a,b)})+\frac{b}{gcd(a,b)}] \mod \frac{b}{gcd(a,b)}x=[(x0modgcd(a,b)b)+gcd(a,b)b]modgcd(a,b)b

.............还是自己再推推吧..........................还是自己再推推吧..........................还是自己再推推吧.............


核心代码如下:

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

2021.11.07:Ps:PJ-301一等,TG-55二等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值