扩展欧几里得算法学习笔记

扩展欧几里得算法:

前言:

学了两周数据结构发现数论图论忘光了,所以回来补一下,顺便写下笔记。


前置需要:

欧几里得算法,裴蜀定理,脑子

欧几里得算法:即辗转相除法, gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) \gcd(a,b)=\gcd(b,a \bmod b) gcd(a,b)=gcd(b,amodb)

裴蜀定理:若 a , b a,b a,b 是整数,且 gcd ⁡ ( a , b ) = d \gcd(a,b)=d gcd(a,b)=d,那么对于任意的整数 x x x y y y, a x + b y ax+by ax+by 都一定是 d d d的倍数,特别地,一定存在整数 x , y x,y x,y,使 a x + b y = d ax+by=d ax+by=d成立。

脑子


用途:

扩展欧几里得算法 ( e x g c d ) (exgcd) (exgcd)一般用于判断并求解形如 a x + b y = c ax+by=c ax+by=c 的不定方程。( a , b , c a,b,c a,b,c 为已知数, x , y x,y x,y 为未知数)


思想:

首先由裴蜀定理可知,方程有解必须满足 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c,所以先讨 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b),再推至所有情况。

可以由欧几里得算法往后推:
a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b)
= gcd ⁡ ( b , a   m o d   b ) =\gcd(b,a\bmod b) =gcd(b,amodb)
= gcd ⁡ ( b , a − ⌊ a b ⌋ ∗ b ) =\gcd(b,a-\left \lfloor \frac{a}{b} \right \rfloor*b) =gcd(b,abab)
= b x 1 + ( a − ⌊ a b ⌋ ∗ b ) y 1 =bx_1+(a-\left \lfloor \frac{a}{b} \right \rfloor*b)y_1 =bx1+(abab)y1
= b x 1 + a y 1 − ⌊ a b ⌋ ∗ b y 1 =bx_1+ay_1-\left \lfloor \frac{a}{b} \right \rfloor *by_1 =bx1+ay1baby1
= a y 1 + b ( x 1 − ⌊ a b ⌋ ∗ y 1 ) =ay_1+b(x_1-\left \lfloor \frac{a}{b} \right \rfloor*y_1) =ay1+b(x1bay1)

发现只要有了 gcd ⁡ ( b , a   m o d   b ) \gcd(b,a\bmod b) gcd(b,amodb)时的 x 1 , y 1 x_1,y_1 x1,y1 ,就可以推出 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 时的 x x x y y

你可能感兴趣的:(学习笔记)