理论基础
理论一:
- 两个数的最小公倍数等于这两个数的乘积除以它们的最大公约数(GCD)。
- 即 LCM(a, b) = |a*b| / GCD(a, b)
例如,求12和18的最小公倍数:
- GCD(12, 18) = 6
- LCM(12, 18) = |12*18| / 6 = 216 / 6 = 36
理论二:辗转相除法,也称为欧几里得算法,是一种用于寻找两个整数最大公约数的高效算法。
假设我们想要找到81和153的最大公约数。
- 153除以81,商为1,余数为72。
- 然后用81除以72,商为1,余数为9。
- 再用72除以9,商为8,余数为0。
这时余数为0,所以在上一步中,9就是153和81的最大公约数。
cpp
//C++代码实现
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int getGCD(int did, int div) { //辗转相除法
while(did % div) {
int red = did % div;
did = div;
div = red;
}
return div;
}
int main(int argc, char** argv) {
srand(time(0));
int res1 = rand()%1001;
int res2 = rand()%801;
int gcd = getGCD(res1, res2);
cout<<"The GCD is "<<gcd<<endl;
int lcm = res1 * res2 / gcd;
cout<<"The LCM of "<<res1<<" and "<<res2<<" is "<<lcm;
return 0;
}