1.最大公约数和最小公倍数概述
最大公约数(Greatest Common Divisor,简称GCD):
也称为最大公因数,是指两个或多个整数共有约数中最大的一个。例如,对于整数12和18,它们的约数分别为:
- 12的约数有1、2、3、4、6、12。
- 18的约数有1、2、3、6、9、18。
可以看出它们共有的约数有1、2、3、6,其中最大的就是6,所以12和18的最大公约数是6。
最小公倍数(Least Common Multiple,简称LCM):
是指两个或多个整数公有的倍数中最小的一个。继续以12和18为例,它们的倍数分别为:
- 12的倍数有12、24、36、48、60、72……
- 18的倍数有18、36、54、72、90……
可以发现它们公有的倍数有36、72……其中最小的是36,所以12和18的最小公倍数是36。
2. 求解最大公约数和最小公倍数的方法
1. 辗转相除法(欧几里得算法)求最大公约数:
用较大数除以较小数得到商和余数,再用除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数。
例如求252和105的最大公约数:
- 252 ÷ 105 = 2……42
- 105 ÷ 42 = 2……21
- 42 ÷ 21 = 2……0
此时余数为0,除数21就是252和105的最大公约数。
2. 通过最大公约数求最小公倍数:
两个数的最小公倍数等于这两个数的乘积除以它们的最大公约数。
例如已知12和18的最大公约数是6,那么它们的最小公倍数 = 12 × 18 ÷ 6 = 36 。
3. 辗转相除法
4. C++ 代码实现及分析
#include <iostream>
using namespace std;
// 求最大公约数的函数,使用辗转相除法
int gcd(int a, int b) {
while (b!= 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 求最小公倍数的函数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int num1, num2;
cout << "请输入两个整数:";
cin >> num1 >> num2;
int greatestCommonDivisor = gcd(num1, num2);
int leastCommonMultiple = lcm(num1, num2);
cout << num1 << " 和 " << num1 << " 的最大公约数是:" << greatestCommonDivisor << endl;
cout << num1 << " 和 " << num1 << " 的最小公倍数是:" << leastCommonMultiple << endl;
return 0;
}
代码分析:
- 在代码中,定义了两个函数
gcd
和lcm
。gcd
函数用于求两个数的最大公约数,它通过不断地进行辗转相除操作,直到余数为0,此时返回的a
就是最大公约数。例如,传入a = 252
,b = 105
,在函数内部的循环过程中,会不断更新a
和b
的值,直到b
变为0,最终得到最大公约数。lcm
函数用于求最小公倍数,它直接调用gcd
函数先求出最大公约数,然后按照两个数的乘积除以最大公约数的公式来计算最小公倍数。