C++ 中求最小公倍数 (LCM) 为 N 的不同数的最大和
c++server side programmingprogramming
本题给定一个数 N。我们的任务是编写一个程序,用 C++ 求出最小公倍数 (LCM) 为 N 的不同数的最大和。
问题描述
这里,我们需要求出以 N 为最小公倍数 (LCM) 的最大数之和。
我们举个例子来理解这个问题:
输入
N = 10
输出
18
解释
最小公倍数为 10 的最大和为 1 + 2 + 5 + 10 = 18
解决方法
一个简单的解决方案是使用以下思路:如果我们想要数字 N 成为最小公倍数,那么我们需要取 N 的所有不同因数,然后将它们相加得到最大和。
为此,我们需要找出 N 的所有因数,然后将它们相加,这样就会得到最大值,因为我们已经考虑了所有能够使最小公倍数为 N 的数字。
示例
用于说明我们解决方案工作原理的程序
#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 = 42; cout<<"The sum of distinct numbers with LCM as "<<N<<" is "<<calcFactorSum(N); return 0; }
输出
The sum of distinct numbers with LCM as 42 is 96