Related Articles

# Print a pair of numbers with the given Sum and Product

• Last Updated : 12 Apr, 2021

Given a sum S and product P, the task is to print any pair of integers which has the sum S and the product P. If there exists no such pair, then print -1.
Examples:

Input: S = 5, P = 6
Output: 2, 3
Explanation
Sum = 2 + 3 = 5, and
Product = 2 * 3 = 6
Input: S = 5, P = 9
Output: -1
Explanation
No such pair exists

Approach: Let the pair be (x, y). Therefore, according to the problem, the given sum (S) will be (x + y) and the given product (P) will be (x * y)

If the pair is (x, y)

Given that product
P = x * y
y = P / x;  (eq.. 1)

Given that sum
S = x + y
S = x + (P / x)  from (eq..1)
x2 - Sx + P = 0

which is a quadratic equation in x.

Since this is a quadratic equation, we just need to find it’s roots, using the below equation.

Here:
a = 1
b = -S
c = P

Therefore the above equation will be changed as:

Below is the implementation of the above approach:

## CPP

 // CPP program to find any pair// which has sum S and product P.#include using namespace std; // Prints roots of quadratic equation// ax*2 + bx + c = 0void findRoots(int b, int c){     int a = 1;    int d = b * b - 4 * a * c;     // calculating the sq root value    // for b * b - 4 * a * c    double sqrt_val = sqrt(abs(d));     if (d > 0) {        double x = -b + sqrt_val;        double y = -b - sqrt_val;         // Finding the roots        int root1 = (x) / (2 * a);        int root2 = (y) / (2 * a);         // Check if the roots        // are valid or not        if (root1 + root2 == -1 * b            && root1 * root2 == c)            cout << root1 << ", " << root2;        else            cout << -1;    }    else if (d == 0) {         // Finding the roots        int root = -b / (2 * a);         // Check if the roots        // are valid or not        if (root + root == -1 * b            && root * root == c)            cout << root << ", " << root;        else            cout << -1;    }     // when d < 0    else {         // No such pair exists in this case        cout << -1;    }     cout << endl;} // Driver codeint main(){    int S = 5, P = 6;    findRoots(-S, P);     S = 5, P = 9;    findRoots(-S, P);     return 0;}

## Java

 // Java program to find any pair// which has sum S and product P.import java.util.*;  class GFG{ // Prints roots of quadratic equation// ax*2 + bx + c = 0static void findRoots(int b, int c){      int a = 1;    int d = b * b - 4 * a * c;      // calculating the sq root value    // for b * b - 4 * a * c    double sqrt_val = Math.sqrt(Math.abs(d));      if (d > 0) {        double x = -b + sqrt_val;        double y = -b - sqrt_val;          // Finding the roots        int root1 = (int)(x) / (2 * a);        int root2 = (int) (y) / (2 * a);          // Check if the roots        // are valid or not        if (root1 + root2 == -1 * b            && root1 * root2 == c)            System.out.print( root1 + ", " + root2);        else            System.out.print( -1);    }    else if (d == 0) {          // Finding the roots        int root = -b / (2 * a);          // Check if the roots        // are valid or not        if (root + root == -1 * b            && root * root == c)            System.out.print(root+ ", "+root);        else            System.out.print(-1);    }      // when d < 0    else {          // No such pair exists in this case        System.out.print( -1);    }      System.out.println();}  // Driver codepublic static void main (String []args){    int S = 5, P = 6;    findRoots(-S, P);      S = 5;    P = 9;    findRoots(-S, P);}} // This code is contributed by chitranayal

## Python3

 # Python3 program to find any pair# which has sum S and product P.from math import sqrt # Prints roots of quadratic equation# ax*2 + bx + c = 0def findRoots(b, c):     a = 1    d = b * b - 4 * a * c     # calculating the sq root value    # for b * b - 4 * a * c    sqrt_val = sqrt(abs(d))     if (d > 0):        x = -b + sqrt_val        y = -b - sqrt_val         # Finding the roots        root1 = (x) // (2 * a)        root2 = (y) // (2 * a)         # Check if the roots        # are valid or not        if (root1 + root2 == -1 * b            and root1 * root2 == c):            print(int(root1),",",int(root2))        else:            print(-1)    elif (d == 0):         # Finding the roots        root = -b // (2 * a)         # Check if the roots        # are valid or not        if (root + root == -1 * b            and root * root == c):            print(root,",",root)        else:            print(-1)     # when d < 0    else:         # No such pair exists in this case        print(-1) # Driver codeif __name__ == '__main__':    S = 5    P = 6    findRoots(-S, P)     S = 5    P = 9    findRoots(-S, P) # This code is contributed by mohit kumar 29

## C#

 // C# program to find any pair// which has sum S and product P. using System; public class GFG{     // Prints roots of quadratic equation    // ax*2 + bx + c = 0    static void findRoots(int b, int c)    {              int a = 1;        int d = b * b - 4 * a * c;              // calculating the sq root value        // for b * b - 4 * a * c        double sqrt_val = Math.Sqrt(Math.Abs(d));              if (d > 0) {            double x = -b + sqrt_val;            double y = -b - sqrt_val;                  // Finding the roots            int root1 = (int)(x) / (2 * a);            int root2 = (int) (y) / (2 * a);                  // Check if the roots            // are valid or not            if (root1 + root2 == -1 * b                && root1 * root2 == c)                Console.Write( root1 + ", " + root2);            else                Console.Write( -1);        }        else if (d == 0) {                  // Finding the roots            int root = -b / (2 * a);                  // Check if the roots            // are valid or not            if (root + root == -1 * b                && root * root == c)                Console.Write(root+ ", "+root);            else                Console.Write(-1);        }              // when d < 0        else {                  // No such pair exists in this case            Console.Write( -1);        }             Console.WriteLine();    }          // Driver code    public static void Main (string []args)    {        int S = 5, P = 6;        findRoots(-S, P);              S = 5;        P = 9;        findRoots(-S, P);    }} // This code is contributed by Yash_R

## Javascript

 
Output:
3, 2
-1

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.

My Personal Notes arrow_drop_up