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

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.
\LARGE x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}

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

Therefore the above equation will be changed as:
\LARGE x = \frac{S\pm \sqrt{S^2-4P}}{2}

Below is the implementation of the above approach:

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find any pair
// which has sum S and product P.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.