【扩展欧几里得算法】(一)解同余方程 学习笔记
用来干嘛的?
给定正整数a,b,最大公约数d。我们想要求解 a x + b y = d ax+by=d ax+by=d的x,y,扩展欧几里得算法可以解决这一问题
如何实现
扩展欧几里得基于欧几里得算法,回忆一下欧几里得算法求GCD的。
( a , b ) = ( b , a m o d b ) (a,b)=(b,a\mod b) (a,b)=(b,amodb)
可以缩小问题规模,把求 ( a , b ) (a,b) (a,b)最大公约数转化为求 ( b , a m o d b ) (b,a\mod b) (b,amodb)的最大公约数
相似的
我们可以先求解出
( b , a m o d b ) = d … … ① (b,a\mod b)=d……① (b,amodb)=d……①
b x + ( a m o d b ) y = d … … ② bx+(a\mod b)y=d……② bx+(amodb)y=d……②
然后我们可以利用②式求解出原问题
a x ′ + b y ′ = d … … ③ ax^{'}+by^{'}=d……③ ax′+by′=d……③
x b + y ( a m o d b ) = d x b + y ( a − ⌊ a b ⌋ b ) = d a y + b x − ⌊ a b ⌋ b y = d a y + b ( x − ⌊ a b ⌋ y ) = d x ′ = y , y ′ = x − ⌊ a b ⌋ y xb+y(a\mod b)=d\\ xb+y(a-\lfloor\frac a b\rfloor b)=d \\{}\\ ay+bx-\lfloor \frac a b\rfloor by=d \\{} \\ ay+b(x-\lfloor \frac a b\rfloor y)=d\\{}\\ x^{'}= y , y^{'}=x-\lfloor \frac a b\rfloor y\\ xb+y(amodb)=dxb+y(a−⌊ba⌋b)=day+bx−⌊ba⌋by=day+b(x−⌊ba⌋y)=dx′=y,y′=x−⌊ba⌋y
exgcd得到了 a x 0 + b y 0 = d ax_0+by_0=d ax0+by0=d的特解,然后得到原线性同余方程的一个特解 c d x 0 \frac c d x_0 dcx0
线性同余方程的通解的形式
x = c d x 0 + k b d y = c d y 0 − k a d x=\frac cdx_0+k\frac b d\\ {}\\ y=\frac c dy_0-k\frac a d\\ x=dcx0

本文详细介绍了扩展欧几里得算法的应用场景及其求解线性同余方程的方法。通过实例展示了如何求解最小正整数解及在特定范围内求解。包括算法原理、代码实现及多个具体应用案例。
最低0.47元/天 解锁文章
935

被折叠的 条评论
为什么被折叠?



