Given a number N, the task is to find out maximum sum of distinct numbers such that the Least Common Multiple of all these numbers is N.

Input : N = 12 Output : 20 Maximum sum which we can achieve is, 1 + 2 + 3 + 4 + 6 + 12 = 28 Input : N = 15 Output : 24

We can solve this problem by observing some cases, As N needs to be LCM of all numbers, all of them will be divisors of N but because a number can be taken only once in sum, all taken numbers should be distinct. The idea is to ** take every divisor of N once in sum** to maximize the result.

How can we say that the sum we got is maximal sum? The reason is, we have taken all the divisors of N into our sum, now if we take one more number into sum which is not divisor of N, then sum will increase but LCM property will not be hold by all those integers. So it is not possible to add even one more number into our sum, except all divisor of N so our problem boils down to this, given N find sum of all divisors, which can be solved in O(sqrt(N)) time.

So total time complexity of solution will O(sqrt(N)) with O(1) extra space.

Code is given below on above stated concept. Please refer this post for finding all divisors of a number.

## C++

`// C/C++ program to get maximum sum of Numbers ` `// with condition that their LCM should be N ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Method returns maximum sum f distinct ` `// number whose LCM is N ` `int` `getMaximumSumWithLCMN(` `int` `N) ` `{ ` ` ` `int` `sum = 0; ` ` ` `int` `LIM = ` `sqrt` `(N); ` ` ` ` ` `// find all divisors which divides 'N' ` ` ` `for` `(` `int` `i = 1; i <= LIM; i++) { ` ` ` `// if 'i' is divisor of 'N' ` ` ` `if` `(N % i == 0) { ` ` ` `// if both divisors are same then add ` ` ` `// it only once else add both ` ` ` `if` `(i == (N / i)) ` ` ` `sum += i; ` ` ` `else` ` ` `sum += (i + N / i); ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `sum; ` `} ` ` ` `// Driver code to test above methods ` `int` `main() ` `{ ` ` ` `int` `N = 12; ` ` ` `cout << getMaximumSumWithLCMN(N) << endl; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to get ` `// maximum sum of Numbers ` `// with condition that ` `// their LCM should be N ` ` ` `class` `GFG { ` ` ` `// Method returns maximum ` ` ` `// sum f distinct number ` ` ` `// whose LCM is N ` ` ` `static` `int` `getMaximumSumWithLCMN(` `int` `N) ` ` ` `{ ` ` ` `int` `sum = ` `0` `; ` ` ` `int` `LIM = (` `int` `)Math.sqrt(N); ` ` ` ` ` `// find all divisors which divides 'N' ` ` ` `for` `(` `int` `i = ` `1` `; i <= LIM; i++) { ` ` ` `// if 'i' is divisor of 'N' ` ` ` `if` `(N % i == ` `0` `) { ` ` ` `// if both divisors are same then add ` ` ` `// it only once else add both ` ` ` `if` `(i == (N / i)) ` ` ` `sum += i; ` ` ` `else` ` ` `sum += (i + N / i); ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `sum; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main(String[] args) ` ` ` `{ ` ` ` `int` `N = ` `12` `; ` ` ` `System.out.println(getMaximumSumWithLCMN(N)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Anant Agarwal. ` |

*chevron_right*

*filter_none*

## Python3

`# Python program to get ` `# maximum sum of Numbers ` `# with condition that ` `# their LCM should be N ` ` ` `import` `math ` ` ` `# Method returns maximum sum f distinct ` `# number whose LCM is N ` `def` `getMaximumSumWithLCMN(N): ` ` ` ` ` `sum` `=` `0` ` ` `LIM ` `=` `int` `(math.sqrt(N)) ` ` ` ` ` `# find all divisors which divides 'N' ` ` ` `for` `i ` `in` `range` `(` `1` `, LIM ` `+` `1` `): ` ` ` ` ` `# if 'i' is divisor of 'N' ` ` ` `if` `(N ` `%` `i ` `=` `=` `0` `): ` ` ` ` ` `# if both divisors are same then add ` ` ` `# it only once else add both ` ` ` `if` `(i ` `=` `=` `(N ` `/` `/` `i)): ` ` ` `sum` `=` `sum` `+` `i ` ` ` `else` `: ` ` ` `sum` `=` `sum` `+` `(i ` `+` `N ` `/` `/` `i) ` ` ` ` ` `return` `sum` ` ` `# driver code ` ` ` `N ` `=` `12` `print` `(getMaximumSumWithLCMN(N)) ` ` ` `# This code is contributed ` `# by Anant Agarwal. ` |

*chevron_right*

*filter_none*

## C#

`// C# program to get maximum sum ` `// of Numbers with condition that ` `// their LCM should be N ` `using` `System; ` ` ` `class` `GFG { ` ` ` ` ` `// Method returns maximum sum f ` ` ` `// distinct number whose LCM is N ` ` ` `static` `int` `getMaximumSumWithLCMN(` `int` `N) ` ` ` `{ ` ` ` `int` `sum = 0; ` ` ` `int` `LIM = (` `int` `)Math.Sqrt(N); ` ` ` ` ` `// Find all divisors which divides 'N' ` ` ` `for` `(` `int` `i = 1; i <= LIM; i++) { ` ` ` ` ` `// if 'i' is divisor of 'N' ` ` ` `if` `(N % i == 0) { ` ` ` ` ` `// if both divisors are same then ` ` ` `// add it only once else add both ` ` ` `if` `(i == (N / i)) ` ` ` `sum += i; ` ` ` `else` ` ` `sum += (i + N / i); ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `sum; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `N = 12; ` ` ` `Console.Write(getMaximumSumWithLCMN(N)); ` ` ` `} ` `} ` ` ` `// This code is contributed by nitin mittal ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `//php program to find the max sum of ` `// numbers whose lcm is n ` ` ` `// Returns maximum sum of numbers with ` `// LCM as N ` `function` `maxSumLCM(` `$n` `) ` `{ ` ` ` `$max_sum` `= 0; ` `// Initialize result ` ` ` ` ` `// Finding a divisor of n and adding ` ` ` `// it to max_sum ` ` ` `for` `(` `$i` `= 1; ` `$i` `* ` `$i` `<= ` `$n` `; ` `$i` `++) ` ` ` `{ ` ` ` `if` `(` `$n` `% ` `$i` `== 0) ` ` ` `{ ` ` ` `$max_sum` `+= ` `$i` `; ` ` ` `if` `(` `$n` `/` `$i` `!= ` `$i` `) ` ` ` `$max_sum` `+= (` `$n` `/ ` `$i` `); ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `$max_sum` `; ` `} ` ` ` `// Driver code ` `$n` `= 2; ` `echo` `MaxSumLCM(` `$n` `), ` `"\n"` `; ` ` ` `// This code is contributed by ajit ` `?> ` |

*chevron_right*

*filter_none*

Output:

28

This article is contributed by **Utkarsh Trivedi**. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Sum of LCM(1, n), LCM(2, n), LCM(3, n), ... , LCM(n, n)
- Maximum sum of distinct numbers such that LCM of these numbers is N
- Minimum replacement of pairs by their LCM required to reduce given array to its LCM
- Find two distinct numbers such that their LCM lies in given range
- Find two numbers with given sum and maximum possible LCM
- Number of distinct integers obtained by lcm(X, N)/X
- Maximum LCM among all pairs (i, j) of first N natural numbers
- Count numbers whose maximum sum of distinct digit-sum is less than or equals M
- Find three integers less than or equal to N such that their LCM is maximum
- Maximum length subarray with LCM equal to product
- Sum of M maximum distinct digit sum from 1 to N that are factors of K
- Finding LCM of more than two (or array) numbers without using GCD
- Program to find LCM of two numbers
- Find LCM of rational numbers
- LCM of two large numbers
- Program to find LCM of 2 numbers without using GCD
- Program to find LCM of two Fibonnaci Numbers
- Find two numbers with the given LCM and minimum possible difference
- Program to find the LCM of two prime numbers
- Highest power of 2 that divides the LCM of first N Natural numbers.