Find two numbers with sum and product both same as N

Given an integer N, the task is to find two numbers a and b such that a * b = N and a + b = N. Print “NO” if no such numbers are possible.

Examples:

Input: N = 69
Output: a = 67.9851
b = 1.01493

Input: N = 1
Output: NO

Approach: If observed carefully, we are given with sum and product of roots of a quadratic equation.
If N2 – 4*N < 0 then only imaginary roots are possible for the equation, hence “NO” will be the answer. Else a and b will be:

a = ( N + sqrt( N2 – 4*N ) ) / 2
b = ( N – sqrt( N2 – 4*N ) ) / 2

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find a and b
// such that a*b=N and a+b=N
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the smallest string
void findAandB(double N)
{
    double val = N * N - 4.0 * N;
  
    // Not possible
    if (val < 0) {
        cout << "NO";
        return;
    }
  
    // find a and b
    double a = (N + sqrt(val)) / 2.0;
    double b = (N - sqrt(val)) / 2.0;
  
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}
  
// Driver Code
int main()
{
    double N = 69.0;
    findAandB(N);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find a and b
// such that a*b=N and a+b=N
  
class GFG{
// Function to return the smallest string
static void findAandB(double N)
{
    double val = N * N - 4.0 * N;
  
    // Not possible
    if (val < 0) {
        System.out.println("NO");
        return;
    }
  
    // find a and b
    double a = (N + Math.sqrt(val)) / 2.0;
    double b = (N - Math.sqrt(val)) / 2.0;
  
    System.out.println("a = "+a);
    System.out.println("b = "+b);
}
  
// Driver Code
public static void main(String[] args)
{
    double N = 69.0;
    findAandB(N);
}
}
// This Code is contributed by mits

chevron_right


Python3

# Python 3 program to find a and b
# such that a*b=N and a+b=N
from math import sqrt

# Function to return the
# smallest string
def findAandB(N):
val = N * N – 4.0 * N

# Not possible
if (val < 0): print("NO") return # find a and b a = (N + sqrt(val)) / 2.0 b = (N - sqrt(val)) / 2.0 print("a =", '{0:.6}' . format(a)) print("b =", '{0:.6}' . format(b)) # Driver Code if __name__ == '__main__': N = 69.0 findAandB(N) # This code is contributed # by SURENDRA_GANGWAR [tabby title = "C#"]

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find a and b
// such that a*b=N and a+b=N
  
using System;
class GFG
{
// Function to return the smallest string
static void findAandB(double N)
{
double val = N * N - 4.0 * N;
  
// Not possible
if (val < 0) {
Console.WriteLine("NO");
return;
}
  
// find a and b
double a = (N + Math.Sqrt(val)) / 2.0;
double b = (N - Math.Sqrt(val)) / 2.0;
  
Console.WriteLine("a = "+a);
Console.WriteLine("b = "+b);
}
  
// Driver Code
static void Main()
{
double N = 69.0;
findAandB(N);
}
// This code is contributed by ANKITRAI1
}

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find a and b 
// such that a*b=N and a+b=N 
  
// Function to return the 
// smallest string 
function findAandB($N
    $val = $N * $N - 4.0 * $N
  
    // Not possible 
    if ($val < 0) 
    
        echo "NO"
        return
    
  
    // find a and b 
    $a = ($N + sqrt($val)) / 2.0; 
    $b = ($N - sqrt($val)) / 2.0; 
  
    echo "a = " , $a, "\n"
    echo "b = " , $b, "\n"
  
// Driver Code 
$N = 69.0; 
findAandB($N); 
  
// This code is contributed by ajit
?>

chevron_right


Output:

a = 67.9851
b = 1.01493


My Personal Notes arrow_drop_up

Just another competitive programmer

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.