📌  相关文章
📜  用给定的总和和乘积打印一对数字

📅  最后修改于: 2021-05-04 23:43:44             🧑  作者: Mango

给定一个和S和产品P,任务是打印任何整数对具有总和S和产品P。如果不存在这样的对,则打印-1。
例子:

方法:将对设为(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.

由于这是一个二次方程式,我们只需要使用以下方程式找到它的根。
\LARGE x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}

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

因此,以上等式将变为:
\LARGE x = \frac{S\pm \sqrt{S^2-4P}}{2}
下面是上述方法的实现:

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