Simplify fraction to lowest terms
Enter a numerator and a denominator and get the fraction in lowest terms, plus the factor that was cancelled: 12/18 becomes 2/3 after dividing both parts by 6. The sign always ends up on the numerator. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Numerator
- 12
- Denominator
- 18
- Gcd
- 6
- Simplified numerator
- 2
- Simplified denominator
- 3
- Simplified
- 2/3
Reducing a fraction to lowest terms is one of the first skills every arithmetic and pre-algebra course demands. Given two integers for the numerator and the denominator, students and automation systems need a single reproducible answer: divide both parts by their greatest common divisor, keep the value unchanged, and show which factor was cancelled. This capability does exactly that with pure integer Euclidean GCD—no floating approximation, no mixed-number conversion, and no multi-operation calculator menu.
What lowest terms means and how the GCD factor works
A fraction n over d is in lowest terms when the greatest common divisor of the absolute values of n and d equals one and the denominator is positive. Any larger common factor can be cancelled without changing the rational value: twelve over eighteen and two over three name the same quantity, but only the second writing is fully reduced. The algorithm computes g equals gcd of absolute n and absolute d with the Euclidean algorithm—repeated remainder until the remainder is zero—then divides both parts by g.
Sign is normalized onto the numerator so negative denominators become positive after reduction; for example twelve over negative eighteen becomes negative two over three, and negative twelve over negative eighteen becomes two over three. A zero numerator with a non-zero denominator reduces to zero over one, because every integer divides zero and the conventional unit form for zero is zero over one.
When the inputs are already coprime and the denominator is already positive, g is one and the simplified pair matches the input pair; the response still reports gcd equals one so graders can teach that no cancellation was needed. This landing focuses only on that reduce-and-show-factor contract. It does not add or multiply two fractions, convert mixed numbers to improper form, or produce multi-line long-division worksheets.
Those are separate search intents and separate tools.
What you can do with it
Classroom and homework reduce checks
Let students submit a numerator and denominator and verify the lowest-terms form and the GCD factor against textbook methods.
LMS and exam auto-grading
Mark simplify-to-lowest-terms items with a deterministic oracle that rejects zero denominators and never invents extra cancel factors.
Worksheet keys and ratio display
Generate answer keys or reduce stored ratios for human-facing labels without a second client-side GCD implementation.
FAQ
How do I simplify a fraction to lowest terms with this tool?
Send integer numerator and a non-zero integer denominator.
How are negative fractions handled?
The sign is placed on the simplified numerator and the denominator is always positive after reduction. For example 12/−18 becomes −2/3.
Is this the same as a full fraction calculator?
No. This landing focuses only on reducing one fraction to lowest terms and showing the GCD. Addition, multiplication, and mixed forms are separate tools.
Why is a denominator of zero not accepted?
Because dividing by zero has no value, so there is no fraction to reduce. The tool rejects it with a clear message that the denominator cannot be zero, instead of inventing an infinite result.
What happens if the fraction is already in lowest terms?
You get the same fraction back with a greatest common divisor of 1, which shows that nothing could be cancelled. For example, 3/7 stays 3/7, because 3 and 7 share no factor other than 1.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/edu/fraction-simplify \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"numerator":12,"denominator":18}'const res = await fetch("https://api.kit.forhosting.com/edu/fraction-simplify", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"numerator": 12,
"denominator": 18
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/fraction-simplify",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"numerator": 12,
"denominator": 18
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/fraction-simplify", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"numerator":12,"denominator":18}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"numerator":12,"denominator":18}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/fraction-simplify", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"numerator": 12,
"denominator": 18
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.fraction_simplify",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
A zero denominator is rejected as invalid_input rather than inventing infinity. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Input contract, response shape, and error behaviour
A denominator of zero always fails with a clear message that the denominator cannot be zero, and those failures are not billed. POST a JSON body with two required integer fields named numerator and denominator. Documented aliases such as num, n, or a for the numerator and den, d, or b for the denominator are accepted so short scripts and form posts can stay compact. Every field may arrive as a JSON integer or as a digit string; booleans, non-integers, empty strings, and values outside the safe integer range fail with invalid_input naming the field. On success the body echoes the original numerator and denominator, reports gcd as the positive common factor that was cancelled, returns simplified_numerator and simplified_denominator with the sign on the numerator and a positive denominator, returns simplified as a display string of the form n/d, sets is_already_simplified when no reduction was required, and includes a short formula string documenting the reduction rule. Example: numerator twelve and denominator eighteen yields gcd six, simplified two over three, and is_already_simplified false. Example: numerator three and denominator seven yields gcd one and is_already_simplified true. Pair the numbers with your own step-by-step prose if you teach prime-factor trees by hand; this endpoint returns the reduced result and the factor used, not multi-line worked solutions. Pricing for successful API calls is the published base of $0.002 per item.
Where simplify-to-lowest-terms earns its keep in education and product work
Secondary-school math classes set reduce-the-fraction targets so students practice finding common factors before they move on to operations with unlike denominators. Product engineers gate form fields and quiz engines with a maximum absolute value and a non-zero denominator check before accept. Failed validation does not consume balance. If you later need multi-operation arithmetic, mixed-number conversion, or decimal-to-fraction approximation, treat those as separate search intents and landings rather than overloading this focused reduce-by-GCD page. Tutoring platforms and homework apps need a deterministic oracle that marks zero denominators as invalid instead of producing NaN or empty success payloads that buggy graders might accept. Recipe and measurement apps sometimes store ratios that must be reduced before display; calling a tiny parse API avoids shipping a second GCD implementation in every client. Because this capability is a pure parse engine, every successful call costs the published $0.002 base price with no model tokens and no outbound network.
Technical questions
What happens if the denominator is zero?
The task fails with invalid_input and a message that the denominator cannot be zero. Invalid input is not billed.
What does the simplify-to-lowest-terms tool cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.