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

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 = 0  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 = 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 code  int 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 = 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)              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 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 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 = 0  def 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 code  if __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

Output:

3, 2
-1


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.

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.