公倍数
公倍数(common multiple)是指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。公倍数中最小的数,就称为这些整数的最小公倍数(lowest common multiple)
求解方法
求多个数的最小公倍数,该怎么求呢?上代码!
common-multiple.cpp
#include <iostream>
#include <vector>
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 / gcd(a, b)) * b;
}
// 计算多个数的最小公倍数
int lcm_multiple(const vector<int>& nums) {
if (nums.empty()) {
return 0; // 如果没有数,返回0
}
int result = nums[0];
for (size_t i = 1; i < nums.size(); ++i) {
result = lcm(result, nums[i]);
}
return result;
}
int main() {
vector<int> numbers;
int num;
cout<<"请输入整数(输入非int数据结束输入状态):";
while (cin >> num) {
numbers.push_back(num);
}
cin.clear();
cin.ignore();
int result = lcm_multiple(numbers);
if ( result == 0){
cout<<"您没有输入数据\n";
return -1;
}
cout<<"您输入的整数:";
for (int n : numbers) {
cout<<n<<" ";
}
cout << "的最小公倍数是: " << result << endl;
return 0;
}
运行结果
小结
先通过欧几里得算法求出两个数的最大公约数,然后调用lcm函数获取最小公倍数,再调用lcm_multiple函数对多个数依次调用lcm函数,求得他们的最小公倍数,初始时,将第一个数作为初始结果,然后依次与后续的数求最小的公倍数,直至处理完所有的数。