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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP