美文网首页算法程序员
算法-辗转相除法

算法-辗转相除法

作者: 不存在的貓 | 来源:发表于2018-08-01 17:48 被阅读137次

算法:辗转相除法(欧几里得算法)

  • GCD递归定理
  • 辗转相除法算法概述
  • 辗转相除法伪代码
  • 辗转相除法代码实现

对于两个数的最大公约数的求解,在我们的笔算过程中,通常是使用一个短除法,本质上其实也就是进行一个质因数分解的过程,但对于一个较大的数来说,将其进行质因数分解是一件非常耗时的过程,这显然不是一个好的做法,因此基于数论基础,我们有了辗转相除法,也叫做欧几里得算法。

GCD递归定理

在叙述该算法之前,先了解辗转相除法的实现前提也就是GCD递归定理:

对任意非负整数a和任意正整数b,
gcd(a,b) = gcd(b,a \quad mod \quad b)

辗转相除法算法概述

基于上面的GCD递归定理,我们便可以知道可以采用递归的方式,对两个整数的最大公约数进行相对较为高效的计算。

算法描述:

  1. 求两个数的余数;
  2. 若余数为0,则较小数即为最大公约数;否则执行3;
  3. 用较小的数替换较大的数,用余数替换较小的数;
  4. 返回1.

算法示例

gcd(30,21) = gcd(21,9) = gcd(9,3) = gcd(3,0) = 3

辗转相除法伪代码表示

下面我们采用递归方式实现辗转相除法。
(以下引用自《算法导论》)

GCD(a, b)

if b == 0
  return a
else
  return GCD(b, a mod b)

辗转相除法实现

C

int gcd(int a, int b)
{
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

pascal

function gcd(a, b : integer) :integer;
begin
    if b = 0 then
        gcd := a
    else
        gcd := gcd(b, a mod b);

参考资料

  • 《算法导论》(第三版)
  • 《Free Pascal 语言与基础算法》

本文首发于个人博客算法 - 辗转相除法 | 不存在的貓, 转载请注明出处

相关文章

  • 算法-辗转相除法

    算法:辗转相除法(欧几里得算法) GCD递归定理 辗转相除法算法概述 辗转相除法伪代码 辗转相除法代码实现 对于两...

  • 算法:辗转相除法

    题目:要求方法传两个正整数参数,返回值就是他们的最大公约数。 解法一:(性能最差) 解法二:辗转相除法,又名欧几里...

  • 辗转相除法求最大公因数 2020-03-12

    今天做了一道题,需要求最大公因数,已经完全把辗转相除法忘记了,特此记录 辗转相除法 辗转相除法,也叫欧几里得算法,...

  • 扩展欧几里德算法

    扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)...

  • 扩展欧几里得算法

    扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展...

  • 最大公约数

    . 欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。...

  • 辗转相除法,最大公约数,最小公倍数

    辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公约数的算法。 算法描...

  • 欧几里得算法(辗转相除法)

    介绍 欧几里得算法,又称辗转相除法,用于计算两个整数的最大公约数。 原理 下面通过一个例子介绍其原理:计算105和...

  • [最大公约数] 欧几里得算法(辗转相除法)

    在数学中,欧几里得算法,又称辗转相除法,是求最大公约数(greatest common divisor)的算法。辗...

  • C++ 辗转相除法 - 求最大公约数

    辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知...

网友评论

    本文标题:算法-辗转相除法

    本文链接:https://www.haomeiwen.com/subject/dbbrvftx.html