算法 001. 辗转相除法(欧几里得算法)求最大公约数

本文介绍辗转相除法(欧几里得算法),一种高效求解两个整数最大公约数(GCD)的方法。通过实例展示算法流程,并提供多种编程语言实现方式。

1. 学习内容:

辗转相除法(欧几里得算法)
参考(维基中文):https://zh.wikipedia.org/wiki/%E8%BC%BE%E8%BD%89%E7%9B%B8%E9%99%A4%E6%B3%95#%E6%9C%80%E5%A4%A7%E5%85%AC%E7%BA%A6%E6%95%B0

a. 使用场景:
  • 求最大公约数
    – 两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。比如:
  1. 两个数 p = 110, q = 121。较小的数为 p = 110,两数相除余数:q / p = 121 / 110 = 1……11,即余数为 11。所以 p = 110,q = 121 的最大公约数就是较小的数 p = 110 和 p、q 相除的余数 11 的最大公约数。110 和 11 最大公约数为 11。
  1. 两个数 a = 99,b = 180。较小的数为 a = 99,两数相除余数:b / a = 180 / 99 = 1……81,即余数为 81。所以 a = 99, b = 180 的最大公约数就是较小的数 a = 99 和 两者余数 81(记为 c = 81)的最大公约数。现在 a = 99 和 b = 180 的最大公约数问题等价于 a = 99,c = 81 的最大公约数问题。
    a = 99,c = 81 的最大公约数,再使用一次上面的计算方法:取两者较小的数 c = 81,两者相除的余数:a / c = 99 / 81 = 1……18(余数记为 d,d = 18),那么 a = 99, b = 180 的最大公约数问题变成了 a = 99, c = 81 的最大公约数问题,又变成了 c = 81,d = 18 之间的最大公约数问题。之后再来一次同样的计算——d = 18,c、d 相除的余数为 81 / 18 = 4 …… 9,问题就变成了 18 和 9 的最大公约数问题。显然最大公约数为 9。
    即最初的问题 a = 99,b = 180 的最大公约数是 9。

2. 学习时间:

2020.10.20


学习产出:

1. 理论

辗转相除法(简称 gcd(p, q),p、q 是两个输入数据)是一种递归算法,每一步计算的输出值就是下一步计算时的输入值。设 k 表示步骤数(从 0 开始计数),算法的计算过程如下(记 k 表示第 k 步,r 表示余数 ):

  1. 给定两个正整数 pq

  2. 步骤:
    第一步:gcd(p0,q0)→p0=n0∗q0+r0→r0=p0%q0第一步:gcd(p_{0},q_{0})→ p_{0}=n_{0}*q_{0}+r_{0}→r_{0} = p_{0} \% q_{0}gcd(p0,q0)p0=n0q0+r0r0=p0%q0
    第二步:gcd(q0,r0)→q0=n1∗r0+r1→r1=q0%r0第二步:gcd(q_{0},r_{0})→ q_{0}=n_{1}*r_{0}+r_{1}→r_{1} = q_{0} \% r_{0}gcd(q0,r0)q0=n1r

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值