查找小于或等于 N 的三个整数,使得它们的 LCM 最大 - C++
c++server side programmingprogramming
在本教程中,我们将编写一个基于 LCM 概念的程序。正如标题所说,我们必须找到三个小于或等于给定数字的数字,这些数字的 LCM 最大。
让我们看一个例子。
在深入研究问题之前,让我们看看什么是 LCM 并为其编写程序。
LCM 是数字的最小公倍数。它也被称为最小公分母。对于两个正数 a 和 b,最小公倍数是能被 a 和 b 整除的最小整数。
如果给定的整数没有共同因子,则 最小公倍数 是给定数字的乘积。
示例
让我们编写程序来查找给定的任意两个正数的最小公倍数。
#include <iostream> using namespace std; int main() { int a = 4, b = 5; int maximum = max(a, b); while (true) { if (maximum % a == 0 && maximum % b == 0) { cout << "LCM: " << maximum << endl; break; } maximum++; } }
输出
如果运行上述程序,您将获得以下输出。
20
我们已经了解了什么是 LCM,并编写了程序来查找两个正数的 LCM。
让我们看看解决问题的步骤。
如果数字为奇数,则 LCM 最大的三个数字为 n、n - 1 和 n - 3。
如果数字为偶数,并且 n 和 n - 3 的 GCM 为 1,则 LCM 最大的三个数字为 n、n - 1 和 n - 3。
否则,LCM 最大的三个数字为 n - 1、n - 2和n - 3。
示例
让我们看看代码。
#include <bits/stdc++.h> using namespace std; void threeNumbersWithMaxLCM(int n) { if (n % 2 != 0) { cout << n << " " << (n - 1) << " " << (n - 2); } else if (__gcd(n, (n - 3)) == 1) { cout << n << " " << (n - 1) << " " << (n - 3); } else { cout << (n - 1) << " " << (n - 2) << " " << (n - 3); } cout << endl; } int main() { int n = 18; threeNumbersWithMaxLCM(n); return 0; }
输出
如果你执行上述程序,那么你将得到以下结果。
17 16 15