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

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.