HRBU-ACM 数论2-最大公约数(欧几里得)

高中我们都学过辗转相除法,如果有人没学过或者忘记了那也没关系,在这里我们在讲解一遍欧几里得算法(求最大公约数)

欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里德算法。

扩展欧几里德算法可用于RSA加密等领域。

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:

当被加的数为 0 时,就得出了 1997 和 615 的最大公约数 1。

    欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。

至于代码嘛。大家可以理解成一个递归同时我也会写出循环和递归的区别让大家更好的理解什么是递归

递归写法:

int gcd(int a,int b)
{
    if (a < b)
        std::swap(a, b);
    return b == 0 ? a : gcd(b, a % b);
}

循环写法:

int gcd(int a, int b)
{
    while(b)
    {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}

猜你喜欢

转载自blog.csdn.net/qq_40910782/article/details/84710422