This calculator performs long division on two polynomials, providing the quotient, remainder, and a detailed step-by-step solution. Polynomial long division is a method for dividing a polynomial by another polynomial of a lower or equal degree, similar to the numerical long division process you might remember from arithmetic.
It's a fundamental tool in algebra for tasks such as factoring polynomials, finding roots, simplifying rational expressions, and preparing expressions for calculus (e.g., partial fraction decomposition).
Enter the polynomial being divided. Use 'x' as the variable, '^' for exponents (e.g., x^3, 2x^2, 5x, -7).
Enter the polynomial by which you are dividing. It must be of a lower or equal degree than the dividend.
Results:
Quotient:
Remainder:
Step-by-Step Solution:
How to Use This Calculator:
Enter the Dividend: Type the polynomial you want to divide into the "Dividend Polynomial" field. For example, x^3 - 2x^2 - 4.
Enter the Divisor: Type the polynomial you want to divide by into the "Divisor Polynomial" field. For example, x - 3.
Click "Calculate Division": The calculator will process your input and display the quotient, remainder, and a detailed breakdown of each step.
Understanding the Process:
Polynomial long division follows these general steps, which are reflected in the calculator's output:
Divide Leading Terms: Divide the leading term of the current dividend by the leading term of the divisor. This gives you the next term of the quotient.
Multiply: Multiply the entire divisor polynomial by the new quotient term you just found.
Subtract: Subtract this product from the current dividend. Be careful with signs!
Bring Down (Implicit): Conceptually, you "bring down" the next term of the original dividend, but in polynomial division, you simply work with the new polynomial resulting from the subtraction.
Repeat: Continue these steps until the degree of the new remainder is less than the degree of the divisor.
The final polynomial you accumulate is the quotient, and the last polynomial left after the subtractions is the remainder.
Example:
Let's divide x^3 - 2x^2 - 4 by x - 3.
Dividend:x^3 - 2x^2 - 4
Divisor:x - 3
The calculator will show you that the Quotient is x^2 + x + 3 and the Remainder is 5, along with all the intermediate steps.
.calculator-container {
font-family: Arial, sans-serif;
max-width: 700px;
margin: 20px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
background-color: #f9f9f9;
}
.calculator-container h2, .calculator-container h3 {
color: #333;
text-align: center;
}
.calculator-container label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.calculator-container input[type="text"] {
width: calc(100% – 22px);
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
.calculator-container button {
background-color: #007bff;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
width: 100%;
margin-top: 10px;
}
.calculator-container button:hover {
background-color: #0056b3;
}
.calculator-container #result {
margin-top: 20px;
padding-top: 15px;
border-top: 1px solid #eee;
}
.calculator-container #result p {
margin-bottom: 5px;
}
.calculator-container #stepsOutput {
background-color: #eef;
border: 1px solid #ccd;
padding: 10px;
border-radius: 4px;
margin-top: 10px;
}
.calculator-container #stepsOutput h4 {
margin-top: 15px;
margin-bottom: 5px;
color: #555;
}
.calculator-container #stepsOutput p {
margin: 5px 0;
line-height: 1.4;
}
.calculator-container .description {
font-size: 0.9em;
color: #666;
margin-top: -5px;
margin-bottom: 15px;
}
.calculator-container code {
background-color: #e0e0e0;
padding: 2px 4px;
border-radius: 3px;
font-family: monospace;
}
// Helper to parse a polynomial string into an array of coefficients
// e.g., "x^3 – 2x^2 – 4″ -> [-4, 0, -2, 1] (index i is coeff of x^i)
function parsePolyString(polyStr) {
var coeffs = [];
var maxPower = 0;
// Normalize string: remove spaces, ensure leading sign, handle implicit 1s
polyStr = polyStr.replace(/\s/g, ");
if (polyStr.charAt(0) !== '-' && polyStr.charAt(0) !== '+') {
polyStr = '+' + polyStr;
}
// Replace 'x' with '1x' if no coefficient, e.g., '+x' -> '+1x', '-x' -> '-1x'
polyStr = polyStr.replace(/([+-])x(?![^]*\^)/g, '$11x'); // Only if 'x' is not followed by '^'
// Replace 'x^' with '1x^' if no coefficient, e.g., '+x^2' -> '+1x^2'
polyStr = polyStr.replace(/([+-])x\^/g, '$11x^');
// Handle standalone numbers like "+5" or "-3"
polyStr = polyStr.replace(/([+-])(\d+(\.\d+)?)(?![xX])/g, '$1$2x^0');
// Regex to find terms: ([+-]?\d*\.?\d*)(x)?(?:\^(\d+))?
// Group 1: sign and coefficient (e.g., "+1", "-2", "+5.5")
// Group 2: 'x' if present
// Group 3: exponent (e.g., "3")
var termRegex = /([+-]?\d*\.?\d*)(x)?(?:\^(\d+))?/g;
var match;
while ((match = termRegex.exec(polyStr)) !== null) {
var coeffStr = match[1];
var hasX = match[2];
var exponentStr = match[3];
if (!coeffStr && !hasX && !exponentStr) continue; // Skip empty matches
var coeff = parseFloat(coeffStr);
if (isNaN(coeff)) { // This should not happen with the normalization above, but for safety
coeff = (coeffStr === '+') ? 1 : (coeffStr === '-') ? -1 : 0;
}
var power = 0;
if (hasX) {
power = 1; // Default to x^1
if (exponentStr) {
power = parseInt(exponentStr);
}
} else { // Constant term (already handled by x^0 replacement)
power = 0;
}
// Ensure coeffs array is large enough
if (power > maxPower) {
maxPower = power;
}
while (coeffs.length 1 && coeffs[coeffs.length – 1] === 0) {
coeffs.pop();
}
return coeffs;
}
// Helper to format an array of coefficients back into a polynomial string
// e.g., [-4, 0, -2, 1] -> "x^3 – 2x^2 – 4"
function formatPolyArray(coeffs) {
if (coeffs.length === 0 || (coeffs.length === 1 && coeffs[0] === 0)) {
return "0";
}
var terms = [];
for (var i = coeffs.length – 1; i >= 0; i–) {
var coeff = coeffs[i];
if (coeff === 0) continue;
var term = "";
var absCoeff = Math.abs(coeff);
if (i === 0) { // Constant term
term = "" + absCoeff;
} else if (i === 1) { // x^1 term
term = (absCoeff === 1) ? "x" : absCoeff + "x";
} else { // x^n term
term = (absCoeff === 1) ? "x^" + i : absCoeff + "x^" + i;
}
if (coeff 0) {
terms.push(" + " + term);
} else { // First term, no leading '+'
terms.push(term);
}
}
return terms.join(").trim();
}
// Helper to get the degree of a polynomial (highest power with non-zero coefficient)
function getPolyDegree(coeffs) {
for (var i = coeffs.length – 1; i >= 0; i–) {
if (coeffs[i] !== 0) {
return i;
}
}
return 0; // Degree of zero polynomial is 0 for this context
}
// Helper to get the leading term (coefficient and power)
function getLeadingTerm(coeffs) {
var degree = getPolyDegree(coeffs);
return { coeff: coeffs[degree], power: degree };
}
// Helper to multiply a polynomial by a single term (cx^n)
function polyMultiplyTerm(polyArr, termCoeff, termPower) {
var result = [];
for (var i = 0; i < polyArr.length; i++) {
if (polyArr[i] !== 0) {
var newPower = i + termPower;
var newCoeff = polyArr[i] * termCoeff;
while (result.length <= newPower) {
result.push(0);
}
result[newPower] += newCoeff;
}
}
return result;
}
// Helper to subtract one polynomial from another
function polySubtract(polyArr1, polyArr2) {
var maxLength = Math.max(polyArr1.length, polyArr2.length);
var result = [];
for (var i = 0; i < maxLength; i++) {
var val1 = (i < polyArr1.length) ? polyArr1[i] : 0;
var val2 = (i 1 && trimmed[trimmed.length – 1] === 0) {
trimmed.pop();
}
return trimmed;
}
// Main calculation function
function calculatePolynomialDivision() {
var dividendStr = document.getElementById("dividendPoly").value;
var divisorStr = document.getElementById("divisorPoly").value;
var stepsOutput = document.getElementById("stepsOutput");
var quotientResult = document.getElementById("quotientResult");
var remainderResult = document.getElementById("remainderResult");
stepsOutput.innerHTML = "";
quotientResult.innerHTML = "";
remainderResult.innerHTML = "";
var dividendCoeffs, divisorCoeffs;
try {
dividendCoeffs = parsePolyString(dividendStr);
divisorCoeffs = parsePolyString(divisorStr);
} catch (e) {
stepsOutput.innerHTML = "Error parsing polynomials: " + e.message + "";
return;
}
// Validate inputs
if (divisorCoeffs.length === 0 || (divisorCoeffs.length === 1 && divisorCoeffs[0] === 0)) {
stepsOutput.innerHTML = "Error: Divisor cannot be zero.";
return;
}
if (dividendCoeffs.length === 0 || (dividendCoeffs.length === 1 && dividendCoeffs[0] === 0)) {
quotientResult.innerHTML = "0";
remainderResult.innerHTML = "0";
stepsOutput.innerHTML = "Dividend is zero, so quotient and remainder are both zero.";
return;
}
var quotient = [];
var remainder = dividendCoeffs;
var stepNum = 1;
stepsOutput.innerHTML += "