Find the integral roots of a given Cubic equation
Last Updated :
15 Jul, 2025
Given 5 integers say A, B, C, D, and E which represents the cubic equation f(x) = A*x^{3} + B*x^{2} + C*x + D = E, 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
Python
# 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>
Time Complexity: O(log N)
Auxiliary Space: O(1) as constant space for variables is being used
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem