Simplifying Radicals Worksheet Generator
Generate a fresh 20-problem practice set on radicals: simplifying by hunting perfect squares,
combining like radicals, multiplying, rationalizing denominators, and area word problems.
Skill: radicals
Each click of Generate builds a brand-new set of 20 problems. Toggle the answer key any time; printing includes the key only when it is visible.
Simplifying Radicals Practice Worksheet
Answer Key
For the teacher or for self-checking after you finish.
function mulberry32(a){ return function(){ a |= 0; a = (a + 0x6D2B79F5) | 0; var t = Math.imul(a ^ (a >>> 15), 1 | a); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; } function ri(rng, lo, hi){ return lo + Math.floor(rng() * (hi - lo + 1)); } function pick(rng, arr){ return arr[Math.floor(rng() * arr.length)]; } function shuffleArr(rng, a){ for (var i = a.length - 1; i > 0; i--){ var j = Math.floor(rng() * (i + 1)); var t = a[i]; a[i] = a[j]; a[j] = t; } return a; } function gcd(a, b){ a = Math.abs(a); b = Math.abs(b); while (b !== 0){ var t = a % b; a = b; b = t; } return a === 0 ? 1 : a; } function red(n, d){ if (d === 0) throw new Error('red: zero denominator'); if (d < 0){ n = -n; d = -d; } if (n === 0) return { n: 0, d: 1 }; var g = gcd(n, d); return { n: n / g, d: d / g }; } function escHTML(s){ return String(s).replace(/[&<>"']/g, function(c){ return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]; }); } function fmtInt(n){ return (n < 0 ? '\u2212' : '') + Math.abs(n); } function powHTML(base, e){ return '' + escHTML(base) + '' + e + ''; }
/* ===================================================================== Exponent worksheet generator — pure logic (no DOM) so it can be tested. Each generator returns {kind, stemHTML, answerHTML, answerText, key}. ===================================================================== */ function simplifyRadical(n){ if (n < 1 || Math.floor(n) !== n) return null; for (var i = Math.floor(Math.sqrt(n)); i >= 2; i--){ var sq = i * i; if (n % sq === 0) return { c:i, r:n / sq }; } return { c:1, r:n }; } function radHTMLd(c, r){ if (r === 1) return '' + c + ''; return '' + (c === 1 ? '' : c) + '√' + r + ''; } function rfracHTMLd(c, r, d){ return '' + radHTMLd(c, r) + '' + d + ''; } var RSQFREE = [2, 3, 5, 6, 7, 10]; function wSimp(rng, diff){ var c = ri(rng, 2, diff === 'hard' ? 10 : 6), m = pick(rng, RSQFREE); var n = c * c * m; return { kind:'simp', stemHTML:'Simplify: ' + radHTMLd(1, n) + '', answerHTML:'' + radHTMLd(c, m) + '', answerText:(c === 1 ? '' : c) + '√' + m, key:'simp|' + c + '|' + m }; } function wPerfect(rng){ var k = ri(rng, 4, 12), n = k * k; return { kind:'perfect', stemHTML:'Simplify: ' + radHTMLd(1, n) + '', answerHTML:'' + k + '', answerText:String(k), key:'perfect|' + k }; } function wAddLike(rng){ var a = ri(rng, 1, 9), b = ri(rng, 1, 9), m = pick(rng, [2, 3, 5]); return { kind:'addlike', stemHTML:'Simplify: ' + radHTMLd(a, m) + ' + ' + radHTMLd(b, m) + '', answerHTML:'' + radHTMLd(a + b, m) + '', answerText:(a + b) + '√' + m, key:'addlike|' + a + '|' + b + '|' + m }; } function wSimpAdd(rng){ var c1 = ri(rng, 2, 4), c2 = ri(rng, 2, 4), m = pick(rng, [2, 3, 5]); return { kind:'simpadd', stemHTML:'Simplify: ' + radHTMLd(1, c1*c1*m) + ' + ' + radHTMLd(1, c2*c2*m) + '', answerHTML:'' + radHTMLd(c1 + c2, m) + '', answerText:(c1 + c2) + '√' + m, key:'simpadd|' + c1 + '|' + c2 + '|' + m }; } function wSquare(rng){ var n = ri(rng, 2, 15); return { kind:'square', stemHTML:'Simplify: (' + radHTMLd(1, n) + ')2', answerHTML:'' + n + '', answerText:String(n), key:'square|' + n }; } function wMul(rng){ var a, b, s, guard = 0; do { a = ri(rng, 2, 12); b = ri(rng, 2, 12); s = simplifyRadical(a * b); guard++; } while (!(!(s.c === 1 || s.r === 1) || guard >= 60)); if (s.c === 1 || s.r === 1){ a = 6; b = 10; s = simplifyRadical(60); } return { kind:'mul', stemHTML:'Simplify: ' + radHTMLd(1, a) + ' · ' + radHTMLd(1, b) + '', answerHTML:'' + radHTMLd(s.c, s.r) + '', answerText:s.c + '√' + s.r, key:'mul|' + a + '|' + b }; } function wRat1(rng){ var p = ri(rng, 2, 10), q = pick(rng, [2, 3, 5, 6, 7, 10]); var g = gcd(p, q), c = p / g, d = q / g; return { kind:'rat1', stemHTML:'Rationalize: ' + p + '' + radHTMLd(1, q) + '', answerHTML:'' + rfracHTMLd(c, q, d) + '', answerText:'(' + c + '√' + q + ')/' + d, key:'rat1|' + p + '|' + q }; } function wRat2(rng){ var n = pick(rng, [2, 3, 5, 6, 7]); return { kind:'rat2', stemHTML:'Rationalize: 1' + radHTMLd(1, n) + '', answerHTML:'' + rfracHTMLd(1, n, n) + '', answerText:'√' + n + '/' + n, key:'rat2|' + n }; } function wWord(rng){ var c = ri(rng, 2, 5), m = pick(rng, [2, 3, 5]); var A = c * c * m; return { kind:'word', stemHTML:'A square has area ' + A + ' cm². What is its exact side length?', answerHTML:'' + radHTMLd(c, m) + ' cm', answerText:c + '√' + m, key:'word|' + c + '|' + m }; } function wSub(rng){ var a = ri(rng, 2, 9), b = ri(rng, 1, a - 1), m = pick(rng, [2, 3, 5]); return { kind:'sub', stemHTML:'Simplify: ' + radHTMLd(a, m) + ' − ' + radHTMLd(b, m) + '', answerHTML:'' + radHTMLd(a - b, m) + '', answerText:(a - b) + '√' + m, key:'sub|' + a + '|' + b + '|' + m }; } function wCoefMul(rng){ var a = ri(rng, 1, 3), m = pick(rng, [2, 3, 5]); var b = ri(rng, 1, 3), n = pick(rng, [2, 3, 5, 6]); var s = simplifyRadical(m * n), guard = 0; while (!(s.r !== 1 || guard++ >= 20)){ n = pick(rng, [2, 3, 5, 6]); s = simplifyRadical(m * n); } if (s.r === 1){ n = (m === 2 ? 3 : 2); s = simplifyRadical(m * n); } var c = a * b * s.c; return { kind:'coefmul', stemHTML:'Simplify: ' + radHTMLd(a, m) + ' · ' + radHTMLd(b, n) + '', answerHTML:'' + radHTMLd(c, s.r) + '', answerText:(c === 1 ? '' : c) + '√' + s.r, key:'coefmul|' + a + '|' + m + '|' + b + '|' + n }; }
var WPOOLS = { easy: [wSimp, wSimp, wPerfect, wAddLike, wAddLike, wSquare, wSub], medium: [wSimp, wSimpAdd, wMul, wMul, wAddLike, wRat2, wSquare, wSub], hard: [wSimp, wCoefMul, wRat1, wRat1, wRat2, wWord, wMul, wSimpAdd] };
function genWorksheet(diff, seed){ var rng = mulberry32(seed >>> 0); var pool = WPOOLS[diff] || WPOOLS.medium; var problems = [], used = {}, guard = 0; while (!(problems.length >= 20 || guard++ >= 600)){ var g = pick(rng, pool); var cand = g(rng, diff); if (!used[cand.key]){ used[cand.key] = 1; problems.push(cand); } } while (problems.length < 20){ var g2 = pick(rng, pool); var p2 = g2(rng, diff); p2.key = p2.key + '#' + problems.length; problems.push(p2); } return problems; } /* ---------------- UI ---------------- */ function el(id){ return document.getElementById(id); } function renderWorksheet(){ var diff = el('diffSel').value; var seed = (Date.now() % 2147483647) || 7; var problems = genWorksheet(diff, seed); var html = ''; for (var i = 0; i < problems.length; i++){ html += '
'; } el('problems').innerHTML = html; el('probCount').textContent = problems.length + ' problems'; var kh = ''; for (var k = 0; k < problems.length; k++){ kh += '
'; } el('keyGrid').innerHTML = kh; } function initWorksheet(){ el('btnGen').addEventListener('click', renderWorksheet); el('btnKey').addEventListener('click', function(){ var sec = el('keySection'); var show = sec.hasAttribute('hidden'); if (show){ sec.removeAttribute('hidden'); } else { sec.setAttribute('hidden', ''); } this.textContent = show ? 'Hide Answer Key' : 'Show Answer Key'; this.setAttribute('aria-pressed', show ? 'true' : 'false'); }); el('btnPrint').addEventListener('click', function(){ window.print(); }); renderWorksheet(); } if (!(typeof document === 'undefined' || !document.addEventListener)){ document.addEventListener('DOMContentLoaded', initWorksheet); }