C++ 中求最小公倍数 (LCM) 为 N 的不同数的最大和

c++server side programmingprogramming

本题给定一个数 N。我们的任务是编写一个程序,用 C++ 求出最小公倍数 (LCM) 为 N 的不同数的最大和。

问题描述

这里,我们需要求出以 N 为最小公倍数 (LCM) 的最大数之和。

我们举个例子来理解这个问题:

输入

N = 10

输出

18

解释

最小公倍数为 10 的最大和为 1 + 2 + 5 + 10 = 18

解决方法

一个简单的解决方案是使用以下思路:如果我们想要数字 N 成为最小公倍数,那么我们需要取 N 的所有不同因数,然后将它们相加得到最大和。

为此,我们需要找出 N 的所有因数,然后将它们相加,这样就会得到最大值,因为我们已经考虑了所有能够使最小公倍数为 N 的数字。

示例

用于说明我们解决方案工作原理的程序

#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 = 42;
   cout<<"The sum of distinct numbers with LCM as "<<N<<" is "<<calcFactorSum(N);
   return 0;
}

输出

The sum of distinct numbers with LCM as 42 is 96

相关文章