Thursday, January 9, 2025
Google search engine
HomeData Modelling & AIPrint a pair of numbers with the given Sum and Product

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




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


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


Javascript




<script>
// Javascript program to find any pair
// which has sum S and product P.
 
// Prints roots of quadratic equation
// ax*2 + bx + c = 0
function findRoots(b, c)
{
 
    var a = 1;
    var d = b * b - 4 * a * c;
 
    // calculating the sq root value
    // for b * b - 4 * a * c
    var sqrt_val = Math.sqrt(Math.abs(d));
 
    if (d > 0)
    {
        var x = -b + sqrt_val;
        var y = -b - sqrt_val;
 
        // Finding the roots
        var root1 = (x) / (2 * a);
        var root2 = (y) / (2 * a);
 
        // Check if the roots
        // are valid or not
        if (root1 + root2 == -1 * b
            && root1 * root2 == c)
            document.write(root1 + ", " + root2);
        else
            document.write(-1);
    }
    else if (d == 0)
    {
 
        // Finding the roots
        var root = -b / (2 * a);
 
        // Check if the roots
        // are valid or not
        if (root + root == -1 * b
            && root * root == c)
            document.write(root + ", " + root);
        else
            document.write(-1);
    }
 
    // when d < 0
    else
    {
 
        // No such pair exists in this case
        document.write(-1);
    }
 
    document.write("<br>");
}
 
// Driver code
var S = 5, P = 6;
findRoots(-S, P);
S = 5, P = 9;
findRoots(-S, P);
 
// This code is contributed by rutvik_56.
</script>


Output: 

3, 2
-1

 

Time Complexity: O(1)
Auxiliary Space: O(1)

As constant extra space is used.

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments