# Maximum GCD of two numbers possible by adding same value to them

• Difficulty Level : Medium
• Last Updated : 11 Aug, 2021

Given two numbers A and B, the task is to find the maximum Greatest Common Divisors(GCD) that can be obtained by adding a number X to both A and B.

Examples

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: A = 1, B = 5
Output: 4
Explanation: Adding X = 15, the obtained numbers are A = 16 and B = 20. Therefore, GCD of A, B is 4.

Input: A = 2, B = 23
Output: 21

Approach: This problem can be solved in a very optimized manner using the properties of Euclidean GCD algorithm. Follow the steps below to solve the problem:

• If a > b:  GCD(a, b)= GCD(a – b, b). Therefore, GCD(a, b) = GCD(a – b, b).
• On adding x to A, B, gcd(a + x, b + x) = gcd(a – b, b + x). It can be seen that (a – b) remains constant.
• It can be safely said that the GCD of these numbers will never exceed (a – b). Since (b + x) can be made a multiple of (a – b) by adding a possible value of x.
• Therefore, it can be concluded that GCD remains (a – b).

Below is the implementation of the above approach.

## C++

 `// C++ implementation of above approach.``#include ``using` `namespace` `std;` `// Function to calculate maximum``// gcd of two numbers possible by``// adding same value to both a and b``void` `maxGcd(``int` `a, ``int` `b)``{``    ``cout << ``abs``(a - b);``}` `// Driver Code``int` `main()``{``    ``// Given Input``    ``int` `a = 2231;``    ``int` `b = 343;` `    ``maxGcd(a, b);` `    ``return` `0;``}`

## Java

 `// Java implementation of above approach.``import` `java.io.*;` `class` `GFG``{` `  ``// Function to calculate maximum``  ``// gcd of two numbers possible by``  ``// adding same value to both a and b``  ``static` `void` `maxGcd(``int` `a, ``int` `b)``  ``{``    ``System.out.println(Math.abs(a - b));``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main (String[] args)``  ``{` `    ``// Given Input``    ``int` `a = ``2231``;``    ``int` `b = ``343``;` `    ``maxGcd(a, b);` `  ``}``}` `// This code is contributed by Potta Lokesh`

## Python3

 `# Python3 program for the above approach` `# Function to calculate maximum``# gcd of two numbers possible by``# adding same value to both a and b``def` `maxGcd(a, b):``    ` `    ``print``(``abs``(a ``-` `b))` `# Driver code` `# Given Input``a ``=` `2231``b ``=` `343` `maxGcd(a, b)` `# This code is contributed by Parth Manchanda`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{` ` ``// Function to calculate maximum``  ``// gcd of two numbers possible by``  ``// adding same value to both a and b``  ``static` `void` `maxGcd(``int` `a, ``int` `b)``  ``{``    ``Console.Write(Math.Abs(a - b));``  ``}` `// Driver Code``static` `public` `void` `Main ()``{``    ` `     ``// Given Input``    ``int` `a = 2231;``    ``int` `b = 343;` `    ``maxGcd(a, b);``}``}` `// This code is contributed by code_hunt.`

## Javascript

 ``
Output:
`1888`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up