# Find the pair (a, b) with minimum LCM such that their sum is equal to N

Given a number N, the task is to find two numbers a and b such that a + b = N and LCM(a, b) is minimum.

Examples:

Input: N = 15
Output: a = 5, b = 10
Explanation:
The pair 5, 10 has a sum of 15 and their LCM is 10 which is the minimum possible.

Input: N = 4
Output: a = 2, b = 2
Explanation:
The pair 2, 2 has a sum of 4 and their LCM is 2 which is the minimum possible.

Approach: The idea is to use the concept of GCD and LCM. Below are the steps:

• If N is a Prime Number then the answer is 1 and N – 1 because in any other cases either a + b > N or LCM( a, b) is > N – 1. This is because if N is prime then it implies that N is odd. So a and b, any one of them must be odd and other even. Therefore, LCM(a, b) must be greater than N ( if not 1 and N – 1) as 2 will always be a factor.
• If N is not a prime number then choose a, b such that their GCD is maximum, because of the formula LCM(a, b) = a*b / GCD (a, b). So, in order to minimize LCM(a, b) we must maximize GCD(a, b).
• If x is a divisor of N, then by simple mathematics a and b can be represented as N / x and N / x*( x – 1) respectively. Now as a = N / x and b = N / x * (x – 1), so their GCD comes out as N / x. To maximize this GCD, take the smallest possible x or smallest possible divisor of N.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if number is ` `// prime or not ` `bool` `prime(``int` `n) ` `{ ` `    ``// As 1 is neither prime ` `    ``// nor composite return false ` `    ``if` `(n == 1) ` `        ``return` `false``; ` ` `  `    ``// Check if it is divided by any ` `    ``// number then it is not prime, ` `    ``// return false ` `    ``for` `(``int` `i = 2; i * i <= n; i++) { ` `        ``if` `(n % i == 0) ` `            ``return` `false``; ` `    ``} ` ` `  `    ``// Check if n is not divided ` `    ``// by any number then it is ` `    ``// prime and hence return true ` `    ``return` `true``; ` `} ` ` `  `// Function to find the pair (a, b) ` `// such that sum is N & LCM is minimum ` `void` `minDivisior(``int` `n) ` `{ ` ` `  `    ``// Check if the number is prime ` `    ``if` `(prime(n)) { ` `        ``cout << 1 << ``" "` `<< n - 1; ` `    ``} ` ` `  `    ``// Now, if it is not prime then ` `    ``// find the least divisior ` `    ``else` `{ ` `        ``for` `(``int` `i = 2; i * i <= n; i++) { ` ` `  `            ``// Check if divides n then ` `            ``// it is a factor ` `            ``if` `(n % i == 0) { ` ` `  `                ``// Required output is ` `                ``// a = n/i & b = n/i*(n-1) ` `                ``cout << n / i << ``" "` `                     ``<< n / i * (i - 1); ` `                ``break``; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `N = 4; ` ` `  `    ``// Function call ` `    ``minDivisior(N); ` `    ``return` `0; ` `}`

## Java

 `// Java program for the above approach ` `class` `GFG{ ` ` `  `// Function to check if number is ` `// prime or not ` `static` `boolean` `prime(``int` `n) ` `{ ` `    ``// As 1 is neither prime ` `    ``// nor composite return false ` `    ``if` `(n == ``1``) ` `        ``return` `false``; ` ` `  `    ``// Check if it is divided by any ` `    ``// number then it is not prime, ` `    ``// return false ` `    ``for` `(``int` `i = ``2``; i * i <= n; i++)  ` `    ``{ ` `        ``if` `(n % i == ``0``) ` `            ``return` `false``; ` `    ``} ` ` `  `    ``// Check if n is not divided ` `    ``// by any number then it is ` `    ``// prime and hence return true ` `    ``return` `true``; ` `} ` ` `  `// Function to find the pair (a, b) ` `// such that sum is N & LCM is minimum ` `static` `void` `minDivisior(``int` `n) ` `{ ` ` `  `    ``// Check if the number is prime ` `    ``if` `(prime(n)) ` `    ``{ ` `        ``System.out.print(``1` `+ ``" "` `+  (n - ``1``)); ` `    ``} ` ` `  `    ``// Now, if it is not prime then ` `    ``// find the least divisior ` `    ``else`  `    ``{ ` `        ``for` `(``int` `i = ``2``; i * i <= n; i++) ` `        ``{ ` ` `  `            ``// Check if divides n then ` `            ``// it is a factor ` `            ``if` `(n % i == ``0``)  ` `            ``{ ` ` `  `                ``// Required output is ` `                ``// a = n/i & b = n/i*(n-1) ` `                ``System.out.print(n / i + ``" "` `+ ` `                                ``(n / i * (i - ``1``))); ` `                ``break``; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `N = ``4``; ` ` `  `    ``// Function call ` `    ``minDivisior(N); ` `} ` `} ` ` `  `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program for the above approach ` ` `  `# Function to check if number is ` `# prime or not ` `def` `prime(n): ` `     `  `    ``# As 1 is neither prime ` `    ``# nor composite return false ` `    ``if` `(n ``=``=` `1``): ` `        ``return` `False` ` `  `    ``# Check if it is divided by any ` `    ``# number then it is not prime, ` `    ``# return false ` `    ``for` `i ``in` `range``(``2``, n ``+` `1``): ` `        ``if` `i ``*` `i > n: ` `            ``break` `        ``if` `(n ``%` `i ``=``=` `0``): ` `            ``return` `False` ` `  `    ``# Check if n is not divided ` `    ``# by any number then it is ` `    ``# prime and hence return true ` `    ``return` `True` ` `  `# Function to find the pair (a, b) ` `# such that sum is N & LCM is minimum ` `def` `minDivisior(n): ` ` `  `    ``# Check if the number is prime ` `    ``if` `(prime(n)): ` `        ``print``(``1``, n ``-` `1``) ` ` `  `    ``# Now, if it is not prime then ` `    ``# find the least divisior ` `    ``else``: ` `        ``for` `i ``in` `range``(``2``, n ``+` `1``): ` `            ``if` `i ``*` `i > n: ` `                ``break` ` `  `            ``# Check if divides n then ` `            ``# it is a factor ` `            ``if` `(n ``%` `i ``=``=` `0``): ` ` `  `                ``# Required output is ` `                ``# a = n/i & b = n/i*(n-1) ` `                ``print``(n ``/``/` `i, n ``/``/` `i ``*` `(i ``-` `1``)) ` `                ``break` ` `  `# Driver Code ` `N ``=` `4` ` `  `# Function call ` `minDivisior(N) ` ` `  `# This code is contributed by mohit kumar 29 `

## C#

 `// C# program for the above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to check if number is ` `// prime or not ` `static` `bool` `prime(``int` `n) ` `{ ` `     `  `    ``// As 1 is neither prime ` `    ``// nor composite return false ` `    ``if` `(n == 1) ` `        ``return` `false``; ` ` `  `    ``// Check if it is divided by any ` `    ``// number then it is not prime, ` `    ``// return false ` `    ``for``(``int` `i = 2; i * i <= n; i++)  ` `    ``{ ` `        ``if` `(n % i == 0) ` `            ``return` `false``; ` `    ``} ` ` `  `    ``// Check if n is not divided ` `    ``// by any number then it is ` `    ``// prime and hence return true ` `    ``return` `true``; ` `} ` ` `  `// Function to find the pair (a, b) ` `// such that sum is N & LCM is minimum ` `static` `void` `minDivisior(``int` `n) ` `{ ` ` `  `    ``// Check if the number is prime ` `    ``if` `(prime(n)) ` `    ``{ ` `        ``Console.Write(1 + ``" "` `+ (n - 1)); ` `    ``} ` ` `  `    ``// Now, if it is not prime then ` `    ``// find the least divisior ` `    ``else` `    ``{ ` `        ``for``(``int` `i = 2; i * i <= n; i++) ` `        ``{ ` `             `  `            ``// Check if divides n then ` `            ``// it is a factor ` `            ``if` `(n % i == 0)  ` `            ``{ ` `                 `  `                ``// Required output is ` `                ``// a = n/i & b = n/i*(n-1) ` `                ``Console.Write(n / i + ``" "` `+ ` `                             ``(n / i * (i - 1))); ` `                ``break``; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `N = 4; ` ` `  `    ``// Function call ` `    ``minDivisior(N); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```2 2
```

Time Complexity: O(sqrt(N))
Auxiliary Space: O(1) My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.