给定一个和S和产品P,任务是打印任何整数对具有总和S和产品P。如果不存在这样的对,则打印-1。
例子:
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
方法:将对设为(x,y) 。因此,根据问题,给定的总和( S )将为(x + y) ,给定的乘积( P )将为(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.
由于这是一个二次方程式,我们只需要使用以下方程式找到它的根。
Here:
a = 1
b = -S
c = P
因此,以上等式将变为:
下面是上述方法的实现:
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
Javascript
输出:
3, 2
-1