Find the integral roots of a given Cubic equation
Given 5 integers say A, B, C, D, and E which represents the cubic equation , the task is to find the integral solution for this equation. If there doesn’t exist any integral solution then print “NA”.
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
Please Login to comment...