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
广告