扩展欧几里得归纳算法中的推导公式解释

本文通过数学归纳法详细推导了扩展欧几里得算法中的关键递推公式,利用具体数值实例展示了如何逐步求解最大公约数及其系数。

在《程序设计艺术》中关于扩展欧几里得归纳算法中有个公式:

   a = a' - qa; b = b' -qa,推导如下:

  (1)根据:https://www.math.cmu.edu/~bkell/21110-2010s/extended-euclidean.html

            中的除法算法: n = qd  + r 且 0<= r < d ; =》r = n -qd; 

    根据对如下数字序列观察:

序号a        bcdqr

除法公式余数表达

(注:m=1769; n=551)

10117695513116116=m+(-3)n
21-355111648787 = -4m + 13n
3-4131168712929 = 5m +(-16)n
45-16872930

       可以看出如下规律:  

              d为当前最终值,c1,c2,c3...cn序列可以看出前一段的值;其中 d_{i}=r_{i-1}; ci=ri-2;     

                 (a_{i}, b_{i}, c_{i}, d_{i} )为 a,b, c, d的上一阶段的值;     

m=1769; n=551
116=m+(-3)n a1 m + b1n =c1 a’m + b'n =c
87 = -4m + 13na2m + b2n = c2
29 = 5m +(-16)n        a3m + b3n =c3
0= 5m +(-16) n               am+bn =dam+bn = d

             等式: a'm+b'n =c (公式1)和 am+bn= d(公式2)总是成立。 将c = qd+r代入得出:

                   a'm + b'n = q(am+bn) + r =>r = (a'-qa)m + (b'-qb)n  (公式3)。

                   公式3不改变 公式1和2的形式, 即公式1和2成立,则3也成立(注:公式3表示当前的值)。  

         上述是数学归纳证明,下面找递推公式,就是找出 (a_{i}, b_{i}, c_{i}, d_{i},q_{i} ) <--(a_{i-1},b_{i-1},c_{i-1},,d_{i-1}, q_{i-1})之间的关系:

    由上述关系1:d_{i}=r_{i-1}    ==》d_{i}c_{i-1}-q_{i-1}d_{i-1}

     由上述关系2:c_{i-1} =d_{i-2}   ==》 d_{i}=d_{i-2}-q_{i-1}d_{i-1} 进一步推导出:

                  d_{i} = (a_{i-2} - q_{i-1}a_{i-1}) m + (b_{i-2} -q_{i-1}b_{i-1})n   (I)

             同时:   d_{i} = a_{i}m +  b_{i}n    (II);

       由上可以推导出: a_{i}=    a_{i-2} - q_{i-1}a_{i-1}

                                     b_{i} =   b_{i-2} -q_{i-1}b_{i-1}

即a m + b n = d  的系数 a,b的递推公式
 

       

       


 

分析以下内容是否有问题? 好的,这是一个为你定制的附录。它不提供轻松的答案,而是为你铺设一条清晰的、由一连串关键问题构成的思考路径。你需要通过攻克这些问题,亲自构建出对算法的理解。 --- ### **附录 C:为思考者准备的探索指南——从第一性原则重建扩展算法** 本附录不提供教程,只提供**元教程**——即“如何学习这个教程”的指南。你的任务不是阅读,而是**利用下面的框架,将主文档中的形式化表述转化为你个人的深刻理解**。 #### **C.1 核心挑战:从“是什么”到“为什么”与“如何”** 主文档给出了算法的最终形态。你的任务是追溯它的发明过程。请从回答这个问题开始: > **Q0:基础欧几里得算法在计算gcd(92,33)时,产生了一个余数序列:92, 33, 26, 7, 5, 2, 1, 0。这个序列本身告诉了我们gcd,但它是否隐含了关于`92`和`33`如何组合出`1`的信息?** 这个问题的答案,是通往扩展算法的唯一入口。 #### **C.2 第一阶段:强制性实践——掌握“反向代入”的机械艺术** 在理解任何抽象公式之前,你必须先获得肌肉记忆。 **任务1:完全手算验证** - 使用**仅限反向代入法**,从等式 `1 = 5 - 2*2` 开始,通过纯粹的代数替换(引用主文档中欧几里得算法的每一步),最终得到 `1 = 92*14 + 33*(-39)`。 - **成功标准**:你能够在不参考任何示例的情况下,为另一组数(如a=56, b=15)独立完成此过程。 **在完成任务1的过程中,思考这个问题:** > **Q1:在反向代入时,我每一步的操作在本质上是什么?** > - (提示:观察你正在消除哪个变量,以及你用什么等式来进行替换。) #### **C.3 第二阶段:模式识别——从机械操作到发现规律** 现在,你已不是一个执行者,而是一个观察者。 **任务2:抽象出你的“系数更新规则”** - 回顾你在任务1中的计算。注意,每一步你都有形式为 `current = num1 * coeff1 + num2 * coeff2` 的等式。 - 当你用一个新的等式(例如 `2 = 7 - 5*1`)替换其中一个数(例如 `2`)时,**观察 `coeff1` 和 `coeff2` 是如何变化的**。 **回答这个关键问题:** > **Q2:假设我已知:** > - `gcd = num1 * x1_old + num2 * y1_old` > - 以及 `num2 = num1 * q + r`,可推出 `r = num2 - num1 * q` > - **现在,我想将 `gcd` 表示为 `num1` 和 `r` 的组合:`gcd = num1 * x1_new + r * y1_new`** > - **`x1_new` 和 `y1_new` 应该用 `x1_old`, `y1_old` 和 `q` 如何表示?** > - (提示:将 `r` 的表达式代入,然后合并同类项。) **恭喜**:如果你独立推导出了 `x1_new = x1_old + q * y1_old` 和 `y1_new = y1_old` 或其等价形式,那么你已经重新发现了扩展算法的核心步骤。现在,请将主文档中的递归公式与你推导出的规则进行对比。它们本质上是同一回事,只是视角(是消除`num1`还是消除`num2`)不同。 #### **C.4 第三阶段:建立连接——链接算法与证明** 这是通往彻底理解的最后一步。 **任务3:绘制概念地图** - 在主文档的贝祖定理证明中,关键一步是“考虑集合 `S = {ax + by | x,y ∈ Z}`,并设 `d` 为其最小正元素”。 - 在你的反向代入计算中,每一个中间等式(如 `1 = 5*3 - 7*2`, `1 = 26*3 - 7*11` ...)的右边,都是集合 `S` 中的一个元素。 **回答这个终结性问题:** > **Q3:扩展欧几里得算法与贝祖定理的证明之间,存在怎样的具体对应关系?** > - 算法中计算的每一个“余数”,在证明中扮演什么角色? > - 算法“回溯”的过程,在证明中对应于哪个概念或哪一步? > - 算法最终找到的 `(x, y)`,在证明中是如何被保证存在的? #### **C.5 最终检验** 当你能够清晰、自信地回答以下问题时,你的研究便宣告成功: 1. **操作自主性**:给定任意一对整数,你是否能通过一套明确的、无需灵感迸发的步骤,找到贝祖系数? 2. **原理透彻性**:你是否能向一个虚拟的提问者解释,为什么递归公式 `(x, y) = (y1, x1 - floor(a/b)*y1)` 是正确的?其正确性根植于哪个基本的数学事实? 3. **知识贯通性**:你是否能看到,算法仅仅是定理证明的一个**构造性、可执行的具体方案**? **结语:** 这份附录的目的是将你从被动的“读者”转变为主动的“再发现者”。数学理解的深度,与你个人在思考中投入的努力严格正相关。去思考,去推导,去连接。最终,那个曾经困扰你的算法,将不再是书本上的黑箱魔法,而是你思维中一个自然而牢固的组成部分。
最新发布
10-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值