C++ 中具有 N 为最小公倍数的不同数字的最大和


在本文中,我们给定一个数字 N。我们的任务是创建一个程序,用 C++ 查找最小公倍数为 N 的不同数字的最大和。为了实现这一点,我们首先需要找到具有 N 作为最小公倍数 (LCM) 的最大数字之和。

为了更好地理解,让我们了解三个关键概念:

  • 最小公倍数 (LCM):两个或多个整数的最小公倍数 (LCM) 是能被所有这些整数整除的最小正整数。例如,4 和 5 的 LCM 是 20。实际上,20 是 4 和 5 都能整除且没有余数的最小数字。
  • 不同数字:用于构成总和的数字不能有任何重复(唯一数字)。这意味着你不能选择重复的数字。
  • 最大和:你必须找到满足其总和值尽可能大且其 LCM 仍然等于 N 的唯一数字的集合。

以下是输入和输出场景,用于在 C++ 中查找具有 N 为 LCM 的不同数字的最大和。

输入

N = 18

输出

39

解释

N = 18 的 LCM 是 21 * 32

N = 18 的唯一约数(不同数字)是 1、2、3、6、9、18。

LCM 为 18 的最大和是 1 + 2 + 3 + 6 + 9 + 18 = 39。

解决方案方法

该问题的一个简单解决方案是使用这样的想法:如果我们想要 N 作为 LCM,那么我们需要取 N 的所有不同约数。并将它们加起来得到 maxSum。

为此,我们将找到 N 的所有因子。然后将它们加起来,这将给出最大值,因为我们已经考虑了所有可以使 LCM 等于 N 的数字。

示例

以下是使用 C++ 查找具有 N 为 LCM 的不同数字的最大和的程序。

#include <iostream>
using namespace std;

int calcFactorSum(int N){
   int maxSum = 0;
   for (int i = 1; i*i <= N; i++){
      if (N % i == 0) {
         if (i == (N/i))
            maxSum = maxSum + i;
         else
            maxSum = maxSum + i + (N/i);
      }
   }
   return maxSum;
}
int main(){
   int N = 18;
   cout<<"The sum of distinct numbers with LCM as "<<N<<" is "<<calcFactorSum(N);
   return 0;
}

输出

The sum of distinct numbers with LCM as 18 is 39

更新于:2024年5月22日

浏览量:252

启动你的职业生涯

完成课程获得认证

开始学习
广告