算法篇----求两数的最大公约数和最小公倍数

一、最大公约数与最小公倍数

最大公约数,属于数论所探究的内容。

最大公约数可以通过下面的三种方法求出来。

最小公倍数呢,它与最大公约数的乘机为所求数之积。

比如求  x,y的最大公约数和最小公倍数

记住这个公式: x*y=最小公倍数*最大公约数

这样以来求出最大公约数后就可以求出最小公倍数

二、求最大公约数的三种方法

①辗转相除法

算法流程图

《算法篇----求两数的最大公约数和最小公倍数》

代码块:

int measure(int x, int y)  
{     
    int z = y;  
    while(x%y!=0)  
    {  
        z = x%y;  
        x = y;  
        y = z;    
    }  
    return z;  
}  

运行结果:
《算法篇----求两数的最大公约数和最小公倍数》

②辗转相减法

《算法篇----求两数的最大公约数和最小公倍数》

代码块:

int measure(int a,int b)  
{         
    while(a != b)  
    {  
        if(a>b)  
        {  
            a = a - b;  
        }  
        else   
        {  
            b = b - a;  
        }  
    }  
    return a;  
}  

运行结果:

《算法篇----求两数的最大公约数和最小公倍数》

③穷举法

流程图:

《算法篇----求两数的最大公约数和最小公倍数》

代码块:

int measure(int x,int y)  
{  
    int temp = 0;  
    for(temp = x ; ; temp-- )  
    {  
        if(x%temp == 0 && y%temp==0)   
            break;   
    }  
    return temp;  
}  

代码实现

//****************************************************************************************************  
//  求两个自然数的最小公倍数 - C++ -
//  最小公倍数 = 两数的乘积 / 最大公约数  
//****************************************************************************************************  
  
#include <iostream>  
#include <cassert>  
#include <stack>  
#include <math.h>  
  
using namespace std ;  
  
int GreatestCommonDivisor(int a, int b)  
{  
    int temp;  
  
    if(a < b)  
    {  
        // 交换两个数,使大数放在a的位置上。  
        temp = a;  
        a = b;  
        b = temp;  
    }  
  
    while(b != 0)  
    {  
        // 利用辗转相除法,直到b为0为止。  
        temp = a % b;  
        a = b;  
        b = temp;  
    }  
  
    return a;  
}  
  
int LeastCommonMultiple(int a, int b)  
{  
    int temp = a * b / GreatestCommonDivisor(a, b);  
    return temp;  
}  
  
int main()  
{  
    cout << LeastCommonMultiple(318, 87632) << endl;  
    return 0;  
}  

    原文作者:虚心学习进步
    原文地址: https://blog.csdn.net/qq_34793133/article/details/80305401
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞