因数分解の基本
因数分解とは
想像してみてください——ケーキを焼いたあとに、もとの材料(卵・小麦粉・砂糖)に分解できたら便利ですよね。数式でも同じことができます。前回学んだ「展開」の逆操作が因数分解です。展開が「積 → 和」なら、因数分解は「和 → 積」。
展開: (x + 2)(x + 3) → x² + 5x + 6
因数分解: x² + 5x + 6 → (x + 2)(x + 3)
なぜ因数分解が重要なのか? 方程式の解を求めるとき、グラフの形を読むとき、分数式を約分するときなど、代数のあらゆる場面で登場します。
ステップ1:共通因数を取り出す
最初に確認すること:すべての項に共通する因数はないか。
たとえば は、各項が「 の何倍か」になっています。だから でくくることができます。
6x² + 9x = 3x(2x + 3)
| 元の式 | 共通因数 | 因数分解後 |
|---|---|---|
共通因数を見落とすと後の因数分解が複雑になります。「まず全部に共通するものはないか?」と最初に確認する習慣をつけましょう。
ステップ2:公式による因数分解
展開の公式を逆に読むと因数分解の公式になります。「逆再生ボタン」を押すイメージです。
完全平方式
a² + 2ab + b² = (a + b)²
a² - 2ab + b² = (a - b)²
見分け方のポイント:「(完全な平方)」「(完全な平方)」「真ん中が (その2倍)」という3点セットを探しましょう。
例:( → )
差の平方(平方の差)
a² - b² = (a + b)(a - b)
「2つの完全な平方が引き算になっている」形を見たら、この公式の出番です。
例:
これは非常によく使います。「2つの完全平方の差」を見たら即座に反応できるようにしましょう。
ステップ3: の因数分解
を例に考えます。これを の形に因数分解したいとき、FOIL法を逆に考えると:
(x + α)(x + β) = x² + (α+β)x + αβ
つまり、「積が で、和が になる 2 つの数」を探せばよいのです。
- ( の係数)
- (定数項)
を満たす整数の組 を探します。
の因数対を全て列挙:
| 積 | 和 | ||
|---|---|---|---|
| 1 | 6 | 6 | 7 |
| 2 | 3 | 6 | 5 ✓ |
| -1 | -6 | 6 | -7 |
| -2 | -3 | 6 | -5 |
が条件を満たすので:
x² + 5x + 6 = (x + 2)(x + 3)
下のデモでは、候補の数の組を1つずつ試しながら、正解の組み合わせが光る様子を確認できます。
var t = 0;
var pairs = [
[1, 6], [2, 3], [-1, -6], [-2, -3], [3, 2], [6, 1]
];
var current = 0;
var timer = 0;
function loop() {
ctx.clearRect(0, 0, W, H);
t++;
timer++;
if (timer > 40) { timer = 0; current = (current + 1) % pairs.length; }
ctx.fillStyle = '#94a3b8';
ctx.font = '15px monospace';
ctx.textAlign = 'center';
ctx.fillText('x² + 5x + 6 を因数分解する', W/2, 30);
ctx.fillText('α × β = 6 かつ α + β = 5 となる整数を探す', W/2, 54);
var rowH = 32;
var startY = 80;
var cols = [W/2 - 160, W/2 - 60, W/2 + 40, W/2 + 140];
ctx.fillStyle = '#64748b';
ctx.font = '13px monospace';
ctx.fillText('α', cols[0], startY);
ctx.fillText('β', cols[1], startY);
ctx.fillText('α × β', cols[2], startY);
ctx.fillText('α + β', cols[3], startY);
for (var i = 0; i < pairs.length; i++) {
var alpha = pairs[i][0], beta = pairs[i][1];
var prod = alpha * beta, sum = alpha + beta;
var y = startY + (i + 1) * rowH;
var isCorrect = (prod === 6 && sum === 5);
var isCurrent = (i === current);
if (isCorrect) {
ctx.fillStyle = isCurrent ? '#22c55e' : '#166534';
ctx.fillRect(W/2 - 190, y - 18, 380, 26);
ctx.fillStyle = '#ffffff';
} else if (isCurrent) {
ctx.fillStyle = '#1e3a5f';
ctx.fillRect(W/2 - 190, y - 18, 380, 26);
ctx.fillStyle = '#93c5fd';
} else {
ctx.fillStyle = '#94a3b8';
}
ctx.font = (isCorrect ? 'bold' : '') + ' 14px monospace';
ctx.fillText(alpha, cols[0], y);
ctx.fillText(beta, cols[1], y);
ctx.fillText(prod, cols[2], y);
ctx.fillText(sum + (isCorrect ? ' ← ✓' : ''), cols[3], y);
}
ctx.fillStyle = '#fbbf24';
ctx.font = 'bold 15px monospace';
ctx.fillText('答え:(x + 2)(x + 3)', W/2, 284);
requestAnimationFrame(loop);
}
loop(); ステップ4:(たすき掛け)
の場合は少し複雑になります。 を因数分解してみましょう。
とおくと、展開したときに:
- ( の係数)
- (定数項)
- ( の係数)
という3つの条件を同時に満たす組を探します。この「斜めに掛けて足す」手順をたすき掛けと呼びます。
たすき掛けの手順:
p × s = 1 × 3 = 3
q × r = 1 × 2 = 2 → 交差和 = 3 + 2 = 5 ✗
p × s = 3 × 1 = 3
q × r = 1 × 2 = 2 → 試行継続...
2 | 1 → 2×3=6
| 3 → 1×1=1 合計 6+1=7 ✓
答え:(2x + 1)(x + 3)
確認: ✓
矩形モデルで因数分解を「見る」
の形が長方形の面積を表すことを視覚化します。縦の長さ 、横の長さ の長方形の面積が です。面積を4つの部分に分けると、(青)・(緑)・(紫)・(赤)が現れます。これらを足すと になります。
var xVal, scale, ox, oy;
function loop() {
ctx.clearRect(0, 0, W, H);
xVal = Math.max(1, Math.min(8, (mx / W) * 9));
scale = 200 / (xVal + 3);
ox = 60;
oy = 50;
var xS = xVal * scale;
var s2 = 2 * scale;
var s3 = 3 * scale;
// x² region
ctx.fillStyle = '#3b82f6';
ctx.fillRect(ox, oy, xS, xS);
// 2x region (bottom of x²)
ctx.fillStyle = '#8b5cf6';
ctx.fillRect(ox, oy + xS, xS, s2);
// 3x region (right of x²)
ctx.fillStyle = '#22c55e';
ctx.fillRect(ox + xS, oy, s3, xS);
// 6 region (bottom-right corner)
ctx.fillStyle = '#ef4444';
ctx.fillRect(ox + xS, oy + xS, s3, s2);
// labels
ctx.fillStyle = '#fff';
ctx.font = 'bold 14px monospace';
ctx.textAlign = 'center';
ctx.fillText('x²', ox + xS/2, oy + xS/2 + 5);
ctx.fillText('2x', ox + xS/2, oy + xS + s2/2 + 5);
ctx.fillText('3x', ox + xS + s3/2, oy + xS/2 + 5);
ctx.fillText('6', ox + xS + s3/2, oy + xS + s2/2 + 5);
// axis labels
ctx.fillStyle = '#fbbf24';
ctx.font = '13px monospace';
ctx.textAlign = 'center';
ctx.fillText('x', ox + xS/2, oy - 10);
ctx.fillText('3', ox + xS + s3/2, oy - 10);
ctx.textAlign = 'right';
ctx.fillText('x', ox - 8, oy + xS/2 + 5);
ctx.fillText('2', ox - 8, oy + xS + s2/2 + 5);
ctx.fillStyle = '#e2e8f0';
ctx.font = '14px monospace';
ctx.textAlign = 'left';
var area = xVal*xVal + 5*xVal + 6;
ctx.fillText('x = ' + xVal.toFixed(1), ox, 290);
ctx.fillText('面積 = x² + 5x + 6 = ' + area.toFixed(1) + ' = (x+2)(x+3)', ox, 308);
requestAnimationFrame(loop);
}
loop(); 練習問題
次の式を因数分解してください。
解答:
- (差の平方: なので )
- (積、和 になる数の組は と )
- (たすき掛け)
- (完全平方式:、、)
まとめ
- まず共通因数を探して取り出す——これをやると後が楽になります
- の差の平方は「2つの平方の引き算」を見たら即反応
- の完全平方式:「平方+2倍+平方」のパターン
- は「積が 、和が 」になる数の組を探す
- はたすき掛けで処理
次回は因数分解の応用として、グループ分け法や3乗の和・差の公式を扱います。