Skip to content
Related Articles

Related Articles

Improve Article

Find two numbers whose sum and GCD are given

  • Last Updated : 19 May, 2021

Given sum and gcd of two numbers a and b . The task is to find both the numbers a and b. If the numbers do not exist then print -1 .
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 <bits/stdc++.h>
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




<?php
// PHP program to find two numbers
// whose sum and GCD is given
 
// Function to find gcd of two numbers
function __gcd($a, $b)
{
    if ($b == 0)
        return $a;
         
    return __gcd($b, $a % $b);
}
     
// Function to find two numbers
// whose sum and gcd is given
function findTwoNumbers($sum, $gcd)
{
    // sum != gcd checks that both the
    // numbers are positive or not
    if (__gcd($gcd, $sum - $gcd) == $gcd &&
                            $sum != $gcd)
        echo "a = " , min($gcd, $sum - $gcd),
             " b = ", (int)($sum - min($gcd,
                            $sum - $gcd));
    else
        echo (-1);
}
 
// Driver code
$sum = 8;
$gcd = 2;
 
findTwoNumbers($sum, $gcd);
 
// This code is contributed by Sachin
?>

Javascript




<script>
 
// Javascript program to find two numbers
// whose sum and GCD is given
 
//function to find gcd of two numbers
function __gcd(a, b)
{
    if (b==0) return a;
   return __gcd(b,a%b);
}
     
// Function to find two numbers
// whose sum and gcd is given
function findTwoNumbers(sum, gcd)
{
    // sum != gcd checks that both the
    // numbers are positive or not
    if (__gcd(gcd, sum - gcd) == gcd && sum != gcd)
        document.write(  "a = " + Math.min(gcd, sum - gcd)
            + ", b = " + (sum - Math.min(gcd, sum - gcd)) );
    else
        document.write( -1 );
}
 
// Driver code
 
    let sum = 8;
    let gcd = 2;
 
    findTwoNumbers(sum, gcd);
 
</script>
Output: 
a = 2, b = 6

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :