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 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 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 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# 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 |
<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.