在 C++ 中查找有理数的最小公倍数
c++server side programmingprogramming
在这里我们将看到如何查找有理数的最小公倍数。我们有一个有理数列表。假设列表为 {2/7, 3/14, 5/3},则 LCM 为 30/1。
要解决这个问题,我们必须计算所有分子的 LCM,然后计算所有分母的 gcd,然后有理数的 LCM 将为 −
$$LCM =\frac{LCM\:of\:all\:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠}{GCD\:of\:all\:𝑑𝑒𝑛𝑜𝑚𝑖𝑛𝑎𝑡𝑜𝑟𝑠}$$
示例
#include <iostream> #include <vector> #include <algorithm> using namespace std; int LCM(int a, int b) { return (a * b) / (__gcd(a, b)); } int numeratorLCM(vector<pair<int, int> > vect) { int result = vect[0].first; for (int i = 1; i < vect.size(); i++) result = LCM(vect[i].first, result); return result; } int denominatorGCD(vector<pair<int, int> >vect) { int res = vect[0].second; for (int i = 1; i < vect.size(); i++) res = __gcd(vect[i].second, res); return res; } void rationalLCM(vector<pair<int, int> > vect) { cout << numeratorLCM(vect) << "/"<< denominatorGCD(vect); } int main() { vector<pair<int, int> > vect; vect.push_back(make_pair(2, 7)); vect.push_back(make_pair(3, 14)); vect.push_back(make_pair(5, 3)); cout << "有理数的最小公倍数:"; rationalLCM(vect); }
输出
有理数的最小公倍数:30/1