2.2 欧几里得算法

思维导图:

 

2.2 欧几里得算法

概述:
  • 欧几里得算法是数论中用于计算两个正整数最大公因子(GCD)的经典算法。
  • 算法基于辗转相除法的原理。
互素:
  • 定义:两个整数互素是指它们唯一的共同正整数因子是 1。
  • 例子:8 和 15 是互素的,因为它们没有除 1 以外的共同因子。
最大公因子(GCD):
  • GCD 定义:整数 �a 和 �b 的最大公因子是能同时整除 �a 和 �b 的最大正整数。
  • 符号:gcd(�,�)gcd(a,b) 表示 �a 和 �b 的最大公因子。
  • 特殊情况:gcd(0,0)=0gcd(0,0)=0。
  • 性质:对于非零整数 �a,有 gcd(�,0)=∣�∣gcd(a,0)=∣a∣。
  • 计算方法:gcd(�,�)=gcd(�,�mod  �)gcd(a,b)=gcd(b,amodb) 直到某个余数为 0。
算法描述:
  1. 从两个正整数 �a 和 �b 开始,其中 �>�a>b。
  2. 计算 �a 除以 �b 的余数,记为 �r。
  3. 将 �b 置于 �a 的位置,将 �r 置于 �b 的位置。
  4. 重复步骤 2 和 3,直到 �b 成为 0。
  5. 当 �b 为 0 时,�a 即为最大公因子。
实例:
  • gcd(60,24)gcd(60,24):
    • 60 = 24 × 2 + 12
    • 24 = 12 × 2 + 0
    • GCD = 12
  • 负数的处理:gcd(�,�)gcd(a,b) 与 gcd(−�,�)gcd(−a,b), gcd(�,−�)gcd(a,−b), 和 gcd(−�,−�)gcd(−a,−b) 相同。
相关定理:
  • 如果 �=�×�+�a=b×q+r,则 gcd(�,�)=gcd(�,�)gcd(a,b)=gcd(b,r)。

 我的理解:

理解数论的这一节内容(即带余除法和欧几里得算法)涉及两个主要概念:带余除法(Division Algorithm)和最大公因子(Greatest Common Divisor, GCD)。下面我会分别解释这两个概念,以帮助你更好地理解。

2.1.2 带余除法 (Division Algorithm)

带余除法是一个数学定理,它告诉我们对于给定的任意整数 �a 和正整数 �n,我们总能找到唯一的整数商 �q 和余数 �r,使得:

�=��+�a=qn+r 0≤�<�0≤r<n

换句话说,当你用 �n 去除 �a 时,你会得到一个整数商 �q 和一个余数 �r,这个余数小于除数 �n。

如何理解:
  • 数轴上的表示: 在数轴上,整数 �a 可以被放置在数轴上的某一点。从原点开始,每 �n 个单位画一个点,标记为 �,2�,3�,…n,2n,3n,…。整数 �a 将会落在这些点之间的某个位置。商 �q 就是 �a 之前的那个点,而余数 �r 是 �a 与 ��qn 之间的距离。
  • 算法的执行: 你可以通过不断减去 �n,直到剩下的数小于 �n,这个过程就是实际的带余除法操作。剩下的数就是余数 �r,而你减去 �n 的次数就是商 �q。

2.2 欧几里得算法

欧几里得算法是一个用于找到两个整数最大公因子(GCD)的算法。它基于这样一个事实:两个整数的最大公因子与较小的数和这两个数的差的最大公因子相同。

如何理解:
  • 基本原理: 如果你有两个数 �a 和 �b,其中 �>�a>b,那么 �a 和 �b 的最大公因子与 �b 和 �−�a−b 的最大公因子相同。
  • 算法的执行: 你可以将大的数替换为两数之差,重复这个过程,直到其中一个数变为零。最后非零的数就是这两个数的最大公因子。
  • 算法的证明和实现: 理解算法的关键是认识到,由于最大公因子能整除原始的两个数,它也一定能整除它们的差。这是因为如果 �c 是 �a 和 �b 的因子,那么 �c 也必须是 �−�a−b 的因子。这一点可以用代数推理来证明。
实例:
  • 如果你要找到 6060 和 2424 的最大公因子,你会这样操作:
    • 60 mod 24 = 12 (余数)
    • 24 mod 12 = 0 (余数)
    • 当余数为0时,上一个余数即12为最大公因子。

理解这两个概念的关键是将它们视为处理数和它们的除法关系的基本工具。对于带余除法,想象在数轴上进行操作,对于欧几里得算法,理解整数间的可除性属性和如何通过递归减法过程找到 GCD。练习和应用这些算法到具体例子中,可以帮助进一步加深理解。

 

2.2.2 求最大公因子 (GCD) - 欧几里得算法

概念:
  • 欧几里得算法用于计算两个非负整数a和b的最大公因子(GCD)。
步骤:
  1. 初始化:

    • 确定a ≥ b > 0(如果a < b,则交换它们的值)。
  2. 带余除法:

    • 计算a除以b的商q₁和余数r,使得a = q₁b + r,且0 ≤ r < b。
  3. 递归:

    • 如果r = 0,GCD(a, b) = b。
    • 否则,设置a = b,b = r,返回步骤2。
  4. 终止条件:

    • 当余数r = 0,当前步骤中的b即为所求GCD。
例子:
  • 求GCD(710, 310):
    • 710 = 2 × 310 + 90
    • 310 = 3 × 90 + 40
    • 90 = 2 × 40 + 10
    • 40 = 4 × 10 + 0
    • 因此,GCD(710, 310) = 10。
算法终止证明:
  • 余数序列是严格递减的非负整数序列,必然会达到0,此时的除数即为GCD。
自顶向下的证明:
  • r能整除a和b(由带余除法的性质)。
  • 逆向推导,可以证明最终余数r(不为0的最后一个余数)可以整除所有之前的余数,包括a和b。
实际大数应用例:
  • 求GCD(1160718174, 316258250):
    • 通过一系列的带余除法操作,最终找到GCD为1078。
算法特点:
  • 适用性强:对所有非负整数a和b有效。
  • 效率高:适用于大数计算,非常快速。
实际意义:
  • 在密码学等领域中具有重要的应用,如RSA加密算法中用于确定密钥的可行性。

 我的理解:

这一节“求最大公因子”介绍了欧几里得算法,这是一个古老而有效的方法,用于计算两个整数a和b的最大公因子(GCD)。要理解这个算法,我们可以将其分解为几个关键概念:

  1. 最大公因子(Greatest Common Divisor, GCD): 最大公因子是能够同时整除两个给定整数a和b的最大的正整数。

  2. 欧几里得算法的核心思想

    • 算法基于这样一个事实:两个正整数a和b(a > b)的最大公因子和b以及a除以b的余数r之间的最大公因子相同。即GCD(a, b) = GCD(b, r)
    • 因此,可以通过不断将较大数除以较小数,然后用余数替换较大数的方式,递归地计算GCD。
  3. 算法步骤

    • 首先,比较a和b的大小,确保a是较大的数。
    • 然后进行带余除法:a除以b得到一个商和一个余数r。
    • 如果余数r为0,则b就是a和b的GCD。
    • 如果r不为0,则用b替换a,r替换b,重复带余除法步骤。
    • 继续这个过程,直到余数为0。最后一个非零余数就是a和b的GCD。
  4. 算法的终止和效率

    • 算法终止的条件是余数为0。因为每次都用更小的数代替了原来的数,余数会越来越小,最终必定到达0。
    • 这个过程是高效的,即使对于非常大的数字也是如此。
  5. 在密码学中的应用

    • 欧几里得算法在现代密码学中非常重要,特别是在公钥加密和密钥交换协议中。它常用于判断大整数是否互质(即GCD为1),这对于RSA等加密算法至关重要。

理解欧几里得算法不仅在数论中是基础概念,在很多算法和应用中都非常重要,如计算最小公倍数、解决线性同余方程等。通过跟踪算法的每一步,并亲自演算几个例子,可以帮助更好地理解和掌握这个算法。

总计:

重点:

  1. 算法原理:理解欧几里得算法是基于这样的事实,即两个正整数的最大公因子不变,即使是在其中一个数被另一个数的余数替换之后。这就是说,对于两个整数a和b,GCD(a, b) = GCD(b, a mod b)

  2. 迭代过程:算法通过不断用较小数(b)除较大数(a),然后用余数(r)替代较大数,这样逐渐减小数值的过程中,余数最终会变为0,此时的b即为两数的最大公因子。

  3. 算法应用:欧几里得算法不仅用于计算最大公因子,还是解决其他数论问题如计算最小公倍数、求解线性同余方程和在公钥密码体制中计算模逆元等问题的基础。

难点:

  1. 理解余数的作用:余数在每一步的迭代中都起着关键作用。需要理解余数如何帮助减小问题的规模,并逐步逼近最大公因子。

  2. 递归思想:虽然算法本身是迭代的,但其背后的数学原理是递归的,每一步都将问题规模缩小,直到达到可以直接解决的状态。

易错点:

  1. 顺序混淆:在执行算法时,有时可能会将a和b的顺序弄混,特别是当a小于b时。需要始终确保a是较大的数。

  2. 停止条件判断:应该注意余数为0时停止迭代,将上一步的除数(此时的b)作为GCD。

  3. 商的忽视:虽然在求GCD过程中商不会直接用到,但在算法的每一步中计算商是必要的,因为它决定了下一个余数的值。

  4. 写成代码时的边界情况:在将算法转换为编程代码时,常见错误包括没有正确处理边界情况,例如其中一个或两个数为负数或零。

为了更好地掌握欧几里得算法,最好的方式是多做练习,亲自计算一些整数对的GCD,并尝试将算法转化为编程代码。这样可以通过实践来解决理解过程中遇到的问题。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值