Related Articles

# Find two numbers whose sum and GCD are given

• Last Updated : 19 May, 2021

Given sum and gcd of two numbers and . The task is to find both the numbers a and b. If the numbers do not exist then print .
Examples:

Input: sum = 6, gcd = 2
Output: a = 4, b = 2
4 + 2 = 6 and GCD(4, 2) = 2
Input: sum = 7, gcd = 2
Output: -1
There are no such numbers whose sum is 7 and GCD is 2

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Approach: As GCD is given then it is known that both the numbers will be multiples of it.

• Choose the first number as gcd then the other number will be sum – gcd.
• If the sum of both the numbers chosen in the previous step equals to sum then print both the numbers.
• Else the numbers do not exist and print -1 instead.

Below is the implementation of the above approach:

## C++

 `// C++ program to find two numbers``// whose sum and GCD is given``#include ``using` `namespace` `std;` `// Function to find two numbers``// whose sum and gcd is given``void` `findTwoNumbers(``int` `sum, ``int` `gcd)``{``    ``// sum != gcd checks that both the``    ``// numbers are positive or not``    ``if` `(__gcd(gcd, sum - gcd) == gcd && sum != gcd)``        ``cout << ``"a = "` `<< min(gcd, sum - gcd)``             ``<< ``", b = "` `<< sum - min(gcd, sum - gcd)``             ``<< endl;``    ``else``        ``cout << -1 << endl;``}` `// Driver code``int` `main()``{``    ``int` `sum = 8;``    ``int` `gcd = 2;` `    ``findTwoNumbers(sum, gcd);` `    ``return` `0;``}`

## Java

 `// Java program to find two numbers``// whose sum and GCD is given``import` `java.util.*;``class` `Solution{` `//function to find gcd of two numbers``static` `int` `__gcd(``int` `a,``int` `b)``{``    ``if` `(b==``0``) ``return` `a;``   ``return` `__gcd(b,a%b);``}``    ` `// Function to find two numbers``// whose sum and gcd is given``static` `void` `findTwoNumbers(``int` `sum, ``int` `gcd)``{``    ``// sum != gcd checks that both the``    ``// numbers are positive or not``    ``if` `(__gcd(gcd, sum - gcd) == gcd && sum != gcd)``        ``System.out.println(  ``"a = "` `+ Math.min(gcd, sum - gcd)``            ``+ ``", b = "` `+ (``int``)(sum - Math.min(gcd, sum - gcd)) );``    ``else``        ``System.out.println( -``1` `);``}` `// Driver code``public` `static` `void` `main(String args[])``{``    ``int` `sum = ``8``;``    ``int` `gcd = ``2``;` `    ``findTwoNumbers(sum, gcd);` `}`  `}``//contributed by Arnab Kundu`

## Python3

 `# Python 3 program to find two numbers``# whose sum and GCD is given``from` `math ``import` `gcd as __gcd` `# Function to find two numbers``# whose sum and gcd is given``def` `findTwoNumbers(``sum``, gcd):``    ` `    ``# sum != gcd checks that both the``    ``# numbers are positive or not``    ``if` `(__gcd(gcd, ``sum` `-` `gcd) ``=``=` `gcd ``and``                          ``sum` `!``=` `gcd):``        ``print``(``"a ="``, ``min``(gcd, ``sum` `-` `gcd),``              ``", b ="``, ``sum` `-` `min``(gcd, ``sum` `-` `gcd))``    ``else``:``        ``print``(``-``1``)``        ` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``sum` `=` `8``    ``gcd ``=` `2` `    ``findTwoNumbers(``sum``, gcd)` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# program to find two numbers``// whose sum and GCD is given``using` `System;``class` `GFG``{` `// function to find gcd of two numbers``static` `int` `__gcd(``int` `a, ``int` `b)``{``    ``if` `(b == 0)``        ``return` `a;``    ``return` `__gcd(b, a % b);``}``    ` `// Function to find two numbers``// whose sum and gcd is given``static` `void` `findTwoNumbers(``int` `sum, ``int` `gcd)``{``    ``// sum != gcd checks that both the``    ``// numbers are positive or not``    ``if` `(__gcd(gcd, sum - gcd) == gcd && sum != gcd)``        ``Console.WriteLine(``"a = "` `+ Math.Min(gcd, sum - gcd) +``            ``", b = "` `+ (``int``)(sum - Math.Min(gcd, sum - gcd)));``    ``else``        ``Console.WriteLine( -1 );``}` `// Driver code``public` `static` `void` `Main()``{``    ``int` `sum = 8;``    ``int` `gcd = 2;` `    ``findTwoNumbers(sum, gcd);``}``}` `// This code is contributed by anuj_67..`

## PHP

 ``

## Javascript

 ``
Output:
`a = 2, b = 6`

My Personal Notes arrow_drop_up