查找三个小于或等于 N 的整数,使得它们的最小公倍数最大 - C++


在本教程中,我们将编写一个基于最小公倍数概念的程序。正如标题所说,我们必须找到三个小于或等于给定数字的数字,其最小公倍数最大。

让我们看一个例子。

在深入探讨问题之前,让我们看看什么是最小公倍数并为其编写程序。

最小公倍数 (LCM) 是一个数字的最小公倍数。它也称为最小公约数。对于两个正数 a 和 b,最小公倍数是这两个数都能整除的最小整数。

如果给定的整数没有公因子,则最小公倍数 (LCM) 是给定数字的乘积。

示例

让我们编写程序以找到给定的任意两个正数的最小公倍数。

 实时演示

#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

我们已经了解了什么是最小公倍数以及如何编写程序来查找两个正数的最小公倍数。

让我们看看解决问题的步骤。

  • 如果数字是奇数,则最大最小公倍数的三个数字为n、n - 1n - 3

  • 如果数字是偶数且nn - 3的最大公约数为1,则最大最小公倍数的三个数字为n、n - 1n - 3

  • 否则,最大最小公倍数的三个数字为n - 1、n - 2n - 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

结论

如果您在本教程中有任何疑问,请在评论部分中提出。

更新于: 2020-12-29

364 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.