【C/C++】求最大公约数和最小公倍数

概念:

最大公约数的概念: 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
最小公倍数的概念: 最小公倍数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个自然数来说,指该两数共有倍数中最小的一个。
最小公倍数=两整数的乘积÷最大公约数

方法一:辗转相除法

它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

int gcd(int m, int n)
{
     
//     1.辗转相除法
     int mod;
     while(mod = m % n)
     {
     
         m = n;
         n = mod;
     }
     return n;
}

方法二:更相减损法

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数。

int gcd(int m, int n)
{
     
//    2.更相减损法
    while(m != n)
    {
     
        if(m > n)
            m = m - n;
        else
            n = n - m;
    }
    return m;
}

你可能感兴趣的:(笔记)