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

c++server side programmingprogramming

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

问题描述

我们需要求出 N 所有因数的和。然后将所有不同的因数相加,得到最大和。

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

输入

N = 12

输出

28

解释

N 的所有不同因数为 1, 2, 3, 4, 6, 12.
总和 = 1 + 2 + 3 + 4 + 6 + 12 = 28

解决方案

一个简单的解决方案是找出数字的所有因数,然后将所有不同的因数相加得到结果。

为此,我们将迭代到 N 的平方根。并检查该数字是否能整除 N。如果是,则检查它是否不同;如果是,则将数字与除法商相加;否则,将数字相加。返回最终的最大和。

示例

程序演示我们的解决方案的工作原理,

#include <iostream>
using namespace std;
int calcMaxSumForLCM(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 = 17;
   cout<<"The sum of distinct numbers such that LCM if these numbers is "<<N<<" is "<<calcMaxSumForLCM(N);
   return 0;
}

输出

The sum of distinct numbers such that LCM if these numbers is 17 is 18

相关文章