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

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

摘要生成于 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)

### 费马小定理与扩展欧几里得算法的关系及应用 #### 定义与基本原理 费马小定理指出,当 \( p \) 是一个素数且 \( a \) 不被 \( p \) 整除时,则有 \( a^{p-1} \equiv 1 \pmod{p} \)[^1]。这一性质可用于求解模意义下的乘法逆元。 而扩展欧几里得算法是一种基于辗转相除法的高效方法,能够找到两个整数 \( x \) 和 \( y \),使得满足方程 \( ax + by = gcd(a, b) \)[^3]。特别地,在 \( gcd(a, m) = 1 \) 的情况下,可以通过该算法得到 \( a^{-1} \mod m \) 的值。 两者虽然出发点不同,但在某些场景下具有相似的应用目标——即寻找模反元素(Modular Multiplicative Inverse)。具体来说: - **通过费马小定理计算乘法逆元** 若 \( p \) 是素数且 \( gcd(a, p) = 1 \),则由费马小定理可推导出 \( a^{p-2} \mod p \) 即为 \( a \) 对于模 \( p \) 的乘法逆元[^1]。 - **借助扩展欧几里得算法获取乘法逆元** 当给定任意正整数 \( m \neq p \) (不一定是素数),只要保证 \( gcd(a, m) = 1 \),那么可通过调用扩展欧几里得算法来获得对应的乘法逆元\( x \), 满足条件 \( ax ≡ 1 \pmod{m} \)[^3]。 #### 实际应用场景对比分析 ##### 场景一:加密领域中的RSA算法初始化阶段 在构建 RSA 密码体系过程中,需要频繁涉及大质数及其相关操作。此时通常会采用费马小定理来进行快速指数运算以验证候选参数的有效性或者加速部分中间环节处理速度[^4]。 另一方面,在实际部署环境当中可能还会遇到非标准情况(比如复合型模块化基数),这时就需要依赖更加通用灵活的方式—也就是前面提到过的扩增版Euclid Method 来完成相应任务需求。 以下是使用Python实现上述两种方法的一个简单例子: ```python def fermat_mod_inverse(a, p): """ 使用费马小定理计算a关于模p的乘法逆元 """ return pow(a, p - 2, p) from sympy import mod_inverse as ext_euclidean_mod_inv # 测试数据 if __name__ == "__main__": prime_p = 17 element_a = 3 inv_fermat = fermat_mod_inverse(element_a, prime_p) print(f"Fermat's method inverse of {element_a} modulo {prime_p}: ", inv_fermat) try: inv_ext_eucld = ext_euclidean_mod_inv(element_a, prime_p) print(f"Extended Euclidean algorithm inverse of {element_a} modulo {prime_p}: ", inv_ext_eucld) except ValueError: print("No modular multiplicative inverse exists.") ``` 此脚本展示了如何分别运用这两种技术手段解决问题,并比较它们的结果一致性。 #### 结论总结 综上所述,尽管费马小定理和扩展欧几里得算法各自独立存在并发挥作用,但都能够在特定条件下帮助我们有效地解决有关离散数学结构方面的问题,特别是在现代信息安全技术和理论研究中占据重要地位。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值