欧几里得定理 及 拓展欧几里得 小结

本文介绍了欧几里得定理和拓展欧几里得算法,包括定理定义、应用和模板。欧几里得定理用于求解最大公约数,而拓展欧几里得算法则解决了贝祖等式,并能应用于求解线性同余方程和求单个逆元。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【欧几里得定理】

定义:
  • gcd ⁡ ( a , b ) = gcd ⁡ ( b , a m o d    b ) \gcd(a,b)=\gcd(b,a\mod b) gcd(a,b)=gcd(b,amodb)

应用:

故得到 求解gcd的辗转相除法

模板:
int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}

int lcm(int a,int b)
{
    return a/gcd(a,b)*b;      //这样写防止溢出
}


【拓展欧几里得】

定义:
  • 已知 a , b a, b a,b求解一组 x , y x,y x,y,使它们满足贝祖等式: a x + b y = gcd ⁡ ( a , b ) = d ax+by =\gcd(a, b) =d ax+by=gcd(a,b)=d(解一定存在)

推导:

已知: a x 1 + b y 1 = gcd ⁡ ( a , b ) = d ax_1+by_1=\gcd(a,b)=d ax1+by1=gcd(a,b)=d —— ①
    b x 2 + ( a m o d    b ) y 2 = gcd ⁡ ( b , a m o d    b ) = d bx_2+(a\mod b)y_2=\gcd(b,a\mod b)=d bx2+(amodb)y2=gcd(b,amodb)=d —— ②

由欧几里得定理 gcd ⁡ ( a , b ) = gcd ⁡ ( b , a m o d    b ) \gcd(a,b)=\gcd(b,a\mod b) gcd(a,b)=gcd(b,amodb)
可得: a x 1 + b y 1 = b x 2 + ( a m o d    b ) y 2 ax_1+by_1=bx_2+(a\mod b)y_2 ax1+by1=bx2+(amodb)y2
   ⟹    a x 1 + b y 1 = b x 2 + ( a − [ a b ] b ) y 2 \implies ax_1+by_1=bx_2+(a-[\frac{a}{b}]b)y_2 ax1+by1=bx2+(a[ba]b)y2
   ⟹    a x 1 + b y 1 = a y 2 + b ( x 2 − [ a b ] y 2 ) \implies ax_1+by_1=ay_2+b(x_2-[\frac{a}{b}]y_2) ax1+by1=ay2+b(x2[ba]y2)

所以解得: x 1 = y 2        y 1 = x 2 − [ a b ] y 2 x_1=y_2\;\;\;y_1=x_2-[\frac{a}{b}]y_2 x1=y2y1=x2[ba]y2

当我们已知 x 2 , y 2 x_2,y_2 x2,y2时,便可以往回推导得到 x 1 , y 1 x_1,y_1 x1,y1。可以发现,当 b = 0 b=0 b=0(即辗转相除结束)时,有 d = a , x = 1 d=a,x=1 d=a,x=1,所以可以得到一组 x , y x,y x,y x = 1 , y = 0 x=1,y=0 x=1,y=0 y y y可以为任意值,通常取0),然后以此解回推,即可得到一组特解 x 0 , y 0 x_0,y_0 x0,y0


模板:
void exgcd(int a,int b,int &d,int &x,int &y)
{
	if(b==0)
	{
		x=1;
		y=0;
		d=a;
	}
	else
	{
		exgcd(b,a%b,d,y,x);
		y-=x*(a/b)
	}
}

从特解到通解:

已解得一组特解 x 0 , y 0 x_0,y_0 x0,y0,满足: a x 0 + b y 0 = gcd ⁡ ( a , b ) = d ax_0+by_0 =\gcd(a, b) =d ax0+by0=gcd(a,b)=d

  1. 对于: a x + b y = gcd ⁡ ( a , b ) = d ax+by =\gcd(a, b) =d ax+by=gcd(a,b)=d

    通解为: X = x 0 + k b d            Y = y 0 − k a d          ( k ∈ Z ) X=x_0+k\frac{b}{d}\;\;\;\;\;Y=y_0-k\frac{a}{d}\;\;\;\;(k\in Z) X=x0+kdbY=y0kda(kZ)

  2. 对于: a x + b y = c ax+by =c ax+by=c

    当且仅当 d ∣ c d|c dc( 即 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b)整除 c c c,或者说 c c c gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b)整除 )时,有解

    通解为: X = c d x 0 + k b d            Y = c d y 0 − k a d          ( k ∈ Z ) X=\frac{c}{d}x_0+k\frac{b}{d}\;\;\;\;\;Y=\frac{c}{d}y_0-k\frac{a}{d}\;\;\;\;(k\in Z) X=dcx0+kdbY=dcy0kda(kZ)


应用:
①求解方程(形如 a x + b y = c ax+by =c ax+by=c)的特解/通解

例如要求求出平面内,直线 a x + b y = c ax+by=c ax+by=c上在某些范围内的整数点。


②※ 求解线性同余方程: a x = c ( m o d b ) ax=c\pmod b ax=c(modb)

详见:线性同余方程的求解 及 模板题


③求单个逆元

a a a m o d    p \mod p modp下的逆元,设 a a a的逆元为 x x x

即求解线性同余方程: a x = 1 ( m o d p ) ax=1\pmod p ax=1(modp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值