#03 ふれてみよう高校数学 代数と式の操作

因数分解の応用

より複雑な因数分解へ

たとえば、ax+ay+bx+byax + ay + bx + by という式を見たとき、一見バラバラに見えますが「aaがかかった部分」と「bbがかかった部分」に分ければスッキリとまとめられます。これがグループ分けの発想です。

前回は基本的な因数分解を学びました。今回は4項以上の式のグループ分け3乗の和・差、そして置き換えという3つのテクニックを掘り下げます。これらをマスターすれば、高校数学で登場するほぼすべての因数分解に対応できます。


テクニック1:グループ分け法

4項の多項式を2グループに分けて共通因数を取り出す方法です。「どこで2つに分ければ、それぞれに共通するものが出るか?」を考えます。

例:ax+ay+bx+byax + ay + bx + by

= a(x + y) + b(x + y)
= (a + b)(x + y)

最初の2項には aa が共通、次の2項には bb が共通。そしてどちらにも (x+y)(x + y) が現れる——これがグループ分けのねらいです。

例:x3x2+x1x^3 - x^2 + x - 1

= x²(x - 1) + 1(x - 1)
= (x² + 1)(x - 1)

ポイント:どこで分けるかが腕の見せどころ。グループ分けの組み合わせを試しながら、共通因数が現れる分け方を探します。

グループ化結果
ab+a+b+1ab + a + b + 1(ab+a)+(b+1)(ab+a) + (b+1)(a+1)(b+1)(a+1)(b+1)
x2xy+xyx^2 - xy + x - yx(xy)+1(xy)x(x-y) + 1(x-y)(x+1)(xy)(x+1)(x-y)
x3+x2x1x^3 + x^2 - x - 1x2(x+1)(x+1)x^2(x+1) - (x+1)(x21)(x+1)=(x1)(x+1)2(x^2-1)(x+1) = (x-1)(x+1)^2

テクニック2:3乗の和・差

たとえば a3b3a^3 - b^3 は「aa の3乗から bb の3乗を引いた式」ですが、これが (ab)(a2+ab+b2)(a - b)(a^2 + ab + b^2) というきれいな積に分解できます。

a³ + b³ = (a + b)(a² - ab + b²)
a³ - b³ = (a - b)(a² + ab + b²)

展開して確認してみましょう:

(a+b)(a2ab+b2)(a + b)(a^2 - ab + b^2) =a3a2b+ab2+a2bab2+b3= a^3 - a^2b + ab^2 + a^2b - ab^2 + b^3 =a3+b3= a^3 + b^3

中間の項が相殺して、きれいに a3+b3a^3 + b^3 だけ残ります。

例:8x3278x^3 - 27

8x3=(2x)38x^3 = (2x)^327=3327 = 3^3 と気づくのがカギです。「何かの3乗」の形に気づければ公式を使えます。

8x³ - 27 = (2x)³ - 3³
          = (2x - 3)((2x)² + (2x)(3) + 3²)
          = (2x - 3)(4x² + 6x + 9)

例:x3+64x^3 + 64

64=4364 = 4^3 なので:

x³ + 64 = x³ + 4³
         = (x + 4)(x² - 4x + 16)
a³ - b³ = (a-b)(a²+ab+b²) の数値確認:マウスで a の値を変える
var a, b, total;

function loop() {
ctx.clearRect(0, 0, W, H);

total = 6;
a = Math.max(0.5, Math.min(5.5, (mx / W) * total));
b = total - a;

var lhs = a*a*a - b*b*b;
var rhs = (a - b) * (a*a + a*b + b*b);

ctx.fillStyle = '#94a3b8';
ctx.font = '15px monospace';
ctx.textAlign = 'center';
ctx.fillText('a³ - b³  と  (a-b)(a²+ab+b²) が等しいことを確認', W/2, 28);

ctx.fillStyle = '#3b82f6';
ctx.font = 'bold 32px monospace';
ctx.textAlign = 'center';
ctx.fillText('a³ - b³ = ' + lhs.toFixed(3), W/2, 90);

ctx.fillStyle = '#22c55e';
ctx.fillText('(a-b)(a²+ab+b²) = ' + rhs.toFixed(3), W/2, 140);

var match = Math.abs(lhs - rhs) < 0.001;
ctx.fillStyle = match ? '#fbbf24' : '#ef4444';
ctx.font = '18px monospace';
ctx.fillText(match ? '✓ 両辺が一致!' : '不一致(バグ)', W/2, 185);

ctx.fillStyle = '#64748b';
ctx.font = '14px monospace';
ctx.fillText('a = ' + a.toFixed(2) + ',  b = ' + b.toFixed(2), W/2, 220);
ctx.fillText('a + b = ' + total.toFixed(1) + ' (固定)', W/2, 242);

requestAnimationFrame(loop);
}
loop();

テクニック3:置き換え(代入)

複雑に見える式でも、一部をひとつの文字に置き換えると基本形になることがあります。「難しそうな式も、よく見ると x2+5x+6x^2 + 5x + 6 と同じ形だ!」と気づくための技術です。

例:(x2+x)28(x2+x)+12(x^2 + x)^2 - 8(x^2 + x) + 12

t=x2+xt = x^2 + x と置くと:

t² - 8t + 12 = (t - 2)(t - 6)

tt を戻して:

= (x² + x - 2)(x² + x - 6)
= (x + 2)(x - 1) · (x + 3)(x - 2)

(x2+x)(x^2 + x) を1つのかたまり tt として見る」——これが置き換えの発想です。

例:x45x2+4x^4 - 5x^2 + 4

t=x2t = x^2 と置くと:

t² - 5t + 4 = (t - 1)(t - 4)
             = (x² - 1)(x² - 4)
             = (x+1)(x-1)(x+2)(x-2)
置き換え元の式変換後
t=x2t = x^2x45x2+4x^4 - 5x^2 + 4t25t+4t^2 - 5t + 4
t=x2+xt = x^2 + x(x2+x)28(x2+x)+12(x^2+x)^2 - 8(x^2+x) + 12t28t+12t^2 - 8t + 12
t=sinxt = \sin xsin2x3sinx+2\sin^2 x - 3\sin x + 2t23t+2t^2 - 3t + 2

因数分解の完全な手順

どんな式が来ても、次の順序で考えれば対処できます:

① 共通因数を取り出す
② 項数を確認
   2項 → 差の平方 / 3乗の和・差
   3項 → 完全平方 / たすき掛け
   4項以上 → グループ分け法
③ 置き換えで単純化できないか確認
④ さらに因数分解できないか確認(繰り返し)

因数分解ツリーの可視化

x416x^4 - 16 を段階的に因数分解する様子をアニメーションで見てみましょう。木(ツリー)のように枝分かれしながら、最終的に「これ以上分解できない」ところまで分解していきます。

x⁴ - 16 の段階的因数分解ツリー(自動アニメーション)
var step = 0;
var timer = 0;
var maxStep = 4;

function drawBox(text, x, y, color, alpha) {
ctx.globalAlpha = alpha || 1;
ctx.fillStyle = color || '#1e3a5f';
ctx.fillRect(x - 80, y - 18, 160, 32);
ctx.strokeStyle = '#3b82f6';
ctx.lineWidth = 1.5;
ctx.strokeRect(x - 80, y - 18, 160, 32);
ctx.fillStyle = '#e2e8f0';
ctx.font = 'bold 13px monospace';
ctx.textAlign = 'center';
ctx.fillText(text, x, y + 7);
ctx.globalAlpha = 1;
}

function drawArrow(x1, y1, x2, y2) {
ctx.strokeStyle = '#64748b';
ctx.lineWidth = 1.5;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
}

function loop() {
ctx.clearRect(0, 0, W, H);

timer++;
if (timer > 80) { timer = 0; step = (step + 1) % (maxStep + 1); }

ctx.fillStyle = '#94a3b8';
ctx.font = '14px monospace';
ctx.textAlign = 'center';
ctx.fillText('x⁴ - 16 の因数分解ツリー', W/2, 22);

drawBox('x⁴ - 16', W/2, 55, '#1e3a5f');

if (step >= 1) {
  drawArrow(W/2 - 40, 73, W/2 - 100, 120);
  drawArrow(W/2 + 40, 73, W/2 + 100, 120);
  drawBox('(x² + 4)', W/2 - 100, 138, '#1e293b');
  drawBox('(x² - 4)', W/2 + 100, 138, '#1e3a5f');
  ctx.fillStyle = '#fbbf24';
  ctx.font = '12px monospace';
  ctx.fillText('差の平方: a²-b²=(a+b)(a-b)', W/2, 100);
}

if (step >= 2) {
  ctx.fillStyle = '#64748b';
  ctx.font = '12px monospace';
  ctx.fillText('既約(これ以上分解不可)', W/2 - 100, 175);
}

if (step >= 3) {
  drawArrow(W/2 + 60, 156, W/2 + 10, 205);
  drawArrow(W/2 + 140, 156, W/2 + 190, 205);
  drawBox('(x + 2)', W/2 + 10, 223, '#166534');
  drawBox('(x - 2)', W/2 + 190, 223, '#166534');
  ctx.fillStyle = '#fbbf24';
  ctx.font = '12px monospace';
  ctx.fillText('再び差の平方', W/2 + 100, 188);
}

if (step >= 4) {
  ctx.fillStyle = '#22c55e';
  ctx.font = 'bold 14px monospace';
  ctx.textAlign = 'center';
  ctx.fillText('完全因数分解:(x²+4)(x+2)(x-2)', W/2, 275);
}

requestAnimationFrame(loop);
}
loop();

応用例:対称式の因数分解

a2+b2+c2+ab+bc+caa^2 + b^2 + c^2 + ab + bc + ca のような対称式は、特定のパターンを覚えておくと便利です。

a² + b² + c² + ab + bc + ca
= ½[(a+b)² + (b+c)² + (c+a)²]   ← 常に ≥ 0

また、a3+b3+c33abca^3 + b^3 + c^3 - 3abc は有名な因数分解です:

a³ + b³ + c³ - 3abc = (a + b + c)(a² + b² + c² - ab - bc - ca)

まとめ

  • グループ分け:4項以上のときに2グループに分けて共通因数を探す。「どこで分けると共通するものが出るか?」が腕の見せどころ
  • 3乗の和・差a3±b3=(a±b)(a2ab+b2)a^3 \pm b^3 = (a \pm b)(a^2 \mp ab + b^2)。「何かの3乗」に気づくことが第一歩
  • 置き換え:複雑な部分を tt に置き換えて基本形に帰着させる。「よく見ると知っている形だ」と気づくための発想転換
  • 因数分解は「まず共通因数 → 項数に応じた公式 → 繰り返し確認」の順で進める

次回は有理式(分数式)の計算を学びます。因数分解のスキルが通分・約分で大活躍します。