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.
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 <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> |
3, 2 -1
Time Complexity: O(1)
Auxiliary Space: O(1)
As constant extra space is used.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!