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++ 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;
} |
// 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 |
# 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 |
// 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 } |
<?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 ?> |
<script> // Javascript program to find a and b
// such that a*b=N and a+b=N
// Function to return the smallest string
function findAandB(N)
{
let val = N * N - 4.0 * N;
// Not possible
if (val < 0) {
document.write( "NO" );
return ;
}
// find a and b
let a = (N + Math.sqrt(val)) / 2.0;
let b = (N - Math.sqrt(val)) / 2.0;
document.write( "a = " +a.toFixed(4) + "</br>" );
document.write( "b = " +b.toFixed(5));
}
let N = 69.0;
findAandB(N);
</script> |
a = 67.9851 b = 1.01493
Time Complexity: O(logn2)
Auxiliary Space: O(1)