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