一、最大公约数与最小公倍数
最大公约数,属于数论所探究的内容。
最大公约数可以通过下面的三种方法求出来。
最小公倍数呢,它与最大公约数的乘机为所求数之积。
比如求 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;
}