Given 5 integers say A, B, C, D, and E which represents the cubic equation
Examples:
Input: A = 1, B = 0, C = 0, D = 0, E = 27
Output: 3
Input: A = 1, B = 0, C = 0, D = 0, E = 16
Output: NA
Approach: The idea is to use binary search. Below are the steps:
- Initialise the start and end variable as 0 & 105 respectively.
- Find the middle(say mid) value of start and end check if it satisfy the given equation or not.
- If current mid satisfy the given equation then print the mid value.
- Else if the value of f(x) is less than E then update start as mid + 1.
- Else Update end as mid – 1.
- If we can’t find any integral solution for the above equation then print “-1”.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the value at x of // the given equation long long int check( int A, int B, int C,
int D, long long int x)
{ long long int ans;
// Find the value equation at x
ans = (A * x * x * x
+ B * x * x
+ C * x
+ D);
// Return the value of ans
return ans;
} // Function to find the integral // solution of the given equation void findSolution( int A, int B, int C,
int D, int E)
{ // Initialise start and end
int start = 0, end = 100000;
long long int mid, ans;
// Implement Binary Search
while (start <= end) {
// Find mid
mid = start + (end - start) / 2;
// Find the value of f(x) using
// current mid
ans = check(A, B, C, D, mid);
// Check if current mid satisfy
// the equation
if (ans == E) {
// Print mid and return
cout << mid << endl;
return ;
}
if (ans < E)
start = mid + 1;
else
end = mid - 1;
}
// Print "NA" if not found
// any integral solution
cout << "NA" ;
} // Driver Code int main()
{ int A = 1, B = 0, C = 0;
int D = 0, E = 27;
// Function Call
findSolution(A, B, C, D, E);
} |
Java
// Java program for the above approach import java.util.*;
class GFG{
// Function to find the value at x of // the given equation static long check( int A, int B, int C,
int D, long x)
{ long ans;
// Find the value equation at x
ans = (A * x * x * x +
B * x * x + C * x + D);
// Return the value of ans
return ans;
} // Function to find the integral // solution of the given equation static void findSolution( int A, int B, int C,
int D, int E)
{ // Initialise start and end
long start = 0 , end = 100000 ;
long mid, ans;
// Implement Binary Search
while (start <= end)
{
// Find mid
mid = start + (end - start) / 2 ;
// Find the value of f(x) using
// current mid
ans = check(A, B, C, D, mid);
// Check if current mid satisfy
// the equation
if (ans == E)
{
// Print mid and return
System.out.println(mid);
return ;
}
if (ans < E)
start = mid + 1 ;
else
end = mid - 1 ;
}
// Print "NA" if not found
// any integral solution
System.out.println( "NA" );
} // Driver Code public static void main(String args[])
{ int A = 1 , B = 0 , C = 0 ;
int D = 0 , E = 27 ;
// Function Call
findSolution(A, B, C, D, E);
} } // This code is contributed by Code_Mech |
Python3
# Python3 program for the above approach # Function to find the value at x of # the given equation def check(A, B, C, D, x) :
ans = 0 ;
# Find the value equation at x
ans = (A * x * x * x +
B * x * x + C * x + D);
# Return the value of ans
return ans;
# Function to find the integral # solution of the given equation def findSolution(A, B, C, D, E) :
# Initialise start and end
start = 0 ; end = 100000 ;
mid = 0 ;
ans = 0 ;
# Implement Binary Search
while (start < = end) :
# Find mid
mid = start + (end - start) / / 2 ;
# Find the value of f(x) using
# current mid
ans = check(A, B, C, D, mid);
# Check if current mid satisfy
# the equation
if (ans = = E) :
# Print mid and return
print (mid);
return ;
if (ans < E) :
start = mid + 1 ;
else :
end = mid - 1 ;
# Print "NA" if not found
# any integral solution
print ( "NA" );
# Driver Code if __name__ = = "__main__" :
A = 1 ; B = 0 ; C = 0 ;
D = 0 ; E = 27 ;
# Function Call
findSolution(A, B, C, D, E);
# This code is contributed by AnkitRai01 |
C#
// C# program for the above approach using System;
class GFG{
// Function to find the value at x of // the given equation static long check( int A, int B, int C,
int D, long x)
{ long ans;
// Find the value equation at x
ans = (A * x * x * x +
B * x * x + C * x + D);
// Return the value of ans
return ans;
} // Function to find the integral // solution of the given equation static void findSolution( int A, int B, int C,
int D, int E)
{ // Initialise start and end
long start = 0, end = 100000;
long mid, ans;
// Implement Binary Search
while (start <= end)
{
// Find mid
mid = start + (end - start) / 2;
// Find the value of f(x) using
// current mid
ans = check(A, B, C, D, mid);
// Check if current mid satisfy
// the equation
if (ans == E)
{
// Print mid and return
Console.WriteLine(mid);
return ;
}
if (ans < E)
start = mid + 1;
else
end = mid - 1;
}
// Print "NA" if not found
// any integral solution
Console.Write( "NA" );
} // Driver Code public static void Main()
{ int A = 1, B = 0, C = 0;
int D = 0, E = 27;
// Function Call
findSolution(A, B, C, D, E);
} } // This code is contributed by Code_Mech |
Javascript
<script> // Javascript program for the above approach // Function to find the value at x of // the given equation function check(A, B, C, D, x)
{ var ans;
// Find the value equation at x
ans = (A * x * x * x +
B * x * x + C * x + D);
// Return the value of ans
return ans;
} // Function to find the integral // solution of the given equation function findSolution(A, B, C, D, E)
{ // Initialise start and end
var start = 0, end = 100000;
var mid, ans;
// Implement Binary Search
while (start <= end)
{
// Find mid
mid = parseInt(start + (end - start) / 2);
// Find the value of f(x) using
// current mid
ans = check(A, B, C, D, mid);
// Check if current mid satisfy
// the equation
if (ans == E)
{
// Print mid and return
document.write(mid);
return ;
}
if (ans < E)
start = mid + 1;
else
end = mid - 1;
}
// Print "NA" if not found
// any integral solution
document.write( "NA" );
} // Driver Code var A = 1, B = 0, C = 0;
var D = 0, E = 27;
// Function Call findSolution(A, B, C, D, E); // This code is contributed by Ankita saini </script> |
Output
3
Time Complexity: O(log N)
Auxiliary Space: O(1) as constant space for variables is being used