扩展欧几里得算法

Bézout’s定理

∀ a , b ∈ Z \forall a, b \in Z a,bZ ∃ x , y ∈ Z + \exists x,y \in Z^+ x,yZ+,使得
a x + b y = g c d ( a , b ) (0) ax + by = gcd(a,b) \tag{0} ax+by=gcd(a,b)(0)

扩展欧几里得算法求该定理的解

已知
g c d ( a , b ) = g c d ( b , a % b ) (1) \begin{aligned} gcd(a, b) = gcd(b, a \% b) \end{aligned} \tag{1} gcd(a,b)=gcd(b,a%b)(1)
根据 B e ˊ z o u t ′ s Bézout's Beˊzouts定理, ∃ x ′ , y ′ ∈ Z + \exists x^{'}, y^{'} \in Z^+ x,yZ+,使得:

b x ′ + ( a % b ) y ′ = g c d ( b , a % b ) (2) \begin{aligned} bx^{'} + (a \% b)y^{'} = gcd(b, a \% b) \end{aligned} \tag{2} bx+(a%b)y=gcd(b,a%b)(2)

a % b = a − b ∗ ⌊ a / b ⌋ (3) \begin{aligned} a \% b = a - b * \lfloor a / b \rfloor \end{aligned} \tag{3} a%b=aba/b(3)
( 3 ) (3) (3)带入 ( 2 ) (2) (2),得:

b x ′ + ( a − b ∗ ⌊ a / b ⌋ ) y ′ = g c d ( b , a % b ) a y ′ + b ( x ′ − ⌊ a / b ⌋ y ′ ) = g c d ( b , a % b ) (4) \begin{aligned} bx^{'} + (a - b * \lfloor a / b \rfloor) y^{'} &= gcd(b, a \% b) \\ ay^{'} + b(x^{'} - \lfloor a / b \rfloor y^{'}) &= gcd(b, a \% b) \end{aligned} \tag{4} bx+(aba/b)yay+b(xa/by)=gcd(b,a%b)=gcd(b,a%b)(4)
x = y ′ x = y^{'} x=y y = x ′ − ⌊ a / b ⌋ y ′ y= x^{'} - \lfloor a / b \rfloor y^{'} y=xa/by,将 ( 1 ) (1) (1)代入 ( 4 ) (4) (4),整理得:

a x + b y = g c d ( b , a % b ) = g c d ( a , b ) (5) \begin{aligned} ax + by = gcd(b, a \% b) = gcd(a,b) \end{aligned} \tag{5} ax+by=gcd(b,a%b)=gcd(a,b)(5)
( 5 ) (5) (5)说明,知道 ( 2 ) (2) (2)的解就可以推出定理的解。公式(0)到公式(2)明显是欧几里得算法求解最大公约数的过程。公式(3),(4),(5)是说明:公式(0)的解与公式(2)的解的关系。将上述过程归纳成代码形式:

void exgcd(int a, int b, int& x, int& y) {	//公式(0)
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    exgcd(b, a % b, x, y);	//公式(2)
    int tp = x;
    x = y;
    y = tp - a / b * y;
}
参考
  • https://www.cnblogs.com/fusiwei/p/11775503.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值