https://blog.csdn.net/qq_31828515/article/details/51812154
https://blog.csdn.net/troubleshooter/article/details/25394959
一、最大公约数与最小公倍数
最大公约数,属于数论所探究的内容。
最大公约数可以通过下面的三种方法求出来。
最小公倍数呢,它与最大公约数的乘机为所求数之积。
比如求 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;
- }
运行结果:
②辗转相减法
扫描二维码关注公众号,回复:
1889385 查看本文章
代码块:
- 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;
- }