#01 ふれてみよう高校数学 離散数学・数論

等差数列——一定の差で増える列

等差数列とは

たとえば電車の座席番号を思い浮かべてください。1号車の座席が1, 2, 3, 4, …と並んでいます。毎回「1ずつ増える」ルールで並んでいます。これが等差数列の考え方です。

等差数列(とうさすうれつ)とは、隣り合う項の差が常に一定の数列のことです。この「一定の差」を公差(こうさ)と呼び、dd で表します。

例えば 2,5,8,11,14,2, 5, 8, 11, 14, \ldots という数列は、各項が前の項より 33 大きい等差数列です(d=3d = 3)。


一般項の公式

nn 番目の項はいくつか?」を一発で求めるのが一般項の公式です。

初項 a1a_1、公差 dd の等差数列の第 nn 項(一般項)は次の式で表せます。

aₙ = a₁ + (n-1)d

考え方は単純です——最初の値(a1a_1)から出発して、dd ずつ (n1)(n-1) 回増やした値が nn 番目の項です。

n=1n = 1 のとき:a1=a1+0=a1a_1 = a_1 + 0 = a_1n=2n = 2 のとき:a2=a1+da_2 = a_1 + dnn が増えるたびに dd ずつ増えていく構造です。

nn計算値(a1=2,d=3a_1=2, d=3
12+0×32 + 0 \times 32
22+1×32 + 1 \times 35
32+2×32 + 2 \times 38
42+3×32 + 3 \times 311
102+9×32 + 9 \times 329

等差数列の視覚化

各項を高さとして棒グラフで描くと、棒の高さが等間隔に増加していることが一目でわかります。隣り合う棒の差(公差 dd)が常に同じ幅の「段差」を作っています。

マウスを左右に動かして公差 dd を変えてみましょう。dd がプラスなら右に行くほど高くなり、dd がマイナスなら右に行くほど低くなります。

等差数列 2, 5, 8, 11... の棒グラフ:マウスを動かして公差 d を変えよう
var a1, d, n, x, h, barW, maxH, i, val, label;

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

a1 = 2;
d = Math.round((mx / W) * 8 - 1);
n = 12;
barW = (W - 60) / n - 4;
maxH = 220;

ctx.fillStyle = '#94a3b8';
ctx.font = '14px sans-serif';
ctx.textAlign = 'left';
ctx.fillText('初項 a₁ = ' + a1 + '  公差 d = ' + d, 20, 24);

for (i = 0; i < n; i++) {
  val = a1 + i * d;
  var clampedVal = Math.max(0, Math.min(maxH / 10, val));
  h = clampedVal * 10;
  x = 30 + i * ((W - 60) / n);

  var ratio = i / (n - 1);
  var r = Math.round(59 + ratio * 137);
  var g = Math.round(130 + ratio * 60);
  var b = Math.round(246 - ratio * 100);
  ctx.fillStyle = 'rgb(' + r + ',' + g + ',' + b + ')';
  ctx.fillRect(x, 260 - h, barW, h);

  ctx.fillStyle = '#cbd5e1';
  ctx.font = '11px monospace';
  ctx.textAlign = 'center';
  ctx.fillText(val, x + barW / 2, 275);

  if (i < n - 1 && d !== 0) {
    ctx.strokeStyle = '#fbbf2488';
    ctx.lineWidth = 1;
    ctx.setLineDash([3, 3]);
    var nextVal = a1 + (i + 1) * d;
    var nextClamp = Math.max(0, Math.min(maxH / 10, nextVal));
    var nextX = 30 + (i + 1) * ((W - 60) / n);
    ctx.beginPath();
    ctx.moveTo(x + barW, 260 - clampedVal * 10);
    ctx.lineTo(nextX, 260 - nextClamp * 10);
    ctx.stroke();
    ctx.setLineDash([]);
  }
}

ctx.fillStyle = '#fbbf24';
ctx.font = '13px monospace';
ctx.textAlign = 'left';
ctx.fillText('aₙ = ' + a1 + ' + (n-1)×' + d, 20, 305);

requestAnimationFrame(loop);
}
loop();

等差数列の和の公式

11 項から第 nn 項までの和 SnS_n はどうなるでしょうか?

Sₙ = a₁ + (a₁+d) + (a₁+2d) + … + aₙ

ここでガウスのトリックを使います。これはドイツの天才数学者ガウスが少年のころに先生から「1から100まで足せ」という問題を出されたとき、瞬時に解いた有名な方法です。

数列を順方向と逆方向に並べて足し合わせると:

  Sₙ =   a₁  + (a₁+d) + … + aₙ
  Sₙ =   aₙ  + (aₙ-d) + … + a₁
─────────────────────────────────
 2Sₙ = (a₁+aₙ) + (a₁+aₙ) + … + (a₁+aₙ)   ← n 個

「順方向と逆方向を足すと、どの組もきれいに a1+ana_1 + a_n になる」のがポイントです。これが nn 個あるので:

Sₙ = n(a₁ + aₙ) / 2

dd を使って書き直すと:

Sₙ = n{2a₁ + (n-1)d} / 2

台形で「見る」和の公式

SnS_n は初項 a1a_1 と末項 ana_n を平行な辺にもつ台形の面積と同じ構造です。

面積 = (上底 + 下底) × 高さ / 2
     = (a₁ + aₙ) × n / 2

棒グラフを並べると台形のような形になりますね。その台形の面積が和 SnS_n に対応します。下のデモでは、等差数列の棒グラフが台形の形を形成する様子を確認できます。マウスを動かして nn の値を変えてみましょう。

Sₙ = n(a₁+aₙ)/2:台形として和を可視化する
var a1, d, nMax, i, val, x, h, barW;

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

a1 = 2;
d = 3;
nMax = Math.max(2, Math.round((mx / W) * 18) + 2);
barW = Math.floor((W - 60) / nMax) - 2;

var an = a1 + (nMax - 1) * d;
var Sn = nMax * (a1 + an) / 2;

for (i = 0; i < nMax; i++) {
  val = a1 + i * d;
  h = val * 7;
  x = 30 + i * ((W - 60) / nMax);
  ctx.fillStyle = '#3b82f6';
  ctx.fillRect(x, 240 - h, barW, h);
}

// trapezoid outline
ctx.strokeStyle = '#fbbf24';
ctx.lineWidth = 2;
ctx.setLineDash([5, 4]);
ctx.beginPath();
ctx.moveTo(30, 240 - a1 * 7);
ctx.lineTo(30 + (nMax - 1) * ((W - 60) / nMax) + barW, 240 - an * 7);
ctx.lineTo(30 + (nMax - 1) * ((W - 60) / nMax) + barW, 240);
ctx.lineTo(30, 240);
ctx.closePath();
ctx.stroke();
ctx.setLineDash([]);

ctx.fillStyle = '#e2e8f0';
ctx.font = '14px monospace';
ctx.textAlign = 'left';
ctx.fillText('n = ' + nMax + '  a₁ = ' + a1 + '  aₙ = ' + an, 20, 22);
ctx.fillStyle = '#fbbf24';
ctx.fillText('Sₙ = ' + nMax + ' × (' + a1 + ' + ' + an + ') / 2 = ' + Sn, 20, 42);

requestAnimationFrame(loop);
}
loop();

練習問題

問題1

初項 33、公差 44 の等差数列の第 1010 項を求めよ。

「最初の 33 から 44 ずつ 99 回増やす」と考えます:

a10=3+(101)×4=3+36=39a_{10} = 3 + (10-1) \times 4 = 3 + 36 = 39

問題2

初項 55、末項 5050、項数 1010 の等差数列の和を求めよ。

「最初 55、最後 5050、全部で 1010 個」——台形の公式をそのまま使えます:

S10=10×(5+50)2=10×552=275S_{10} = \frac{10 \times (5 + 50)}{2} = \frac{10 \times 55}{2} = 275

問題3

1+2+3++1001 + 2 + 3 + \cdots + 100 を計算せよ。(ガウスが少年時代に解いた有名問題)

1から100まで、全部で100個の等差数列(d=1d = 1)の和です:

S100=100×(1+100)2=5050S_{100} = \frac{100 \times (1 + 100)}{2} = 5050


まとめ

  • 等差数列:「毎回同じだけ増える(or 減る)」数列。電車の座席番号や毎月の積み立てなどが身近な例
  • 一般項an=a1+(n1)da_n = a_1 + (n-1)d——「最初の値 + 公差 × (n-1)回分」
  • 和の公式Sn=n(a1+an)2S_n = \dfrac{n(a_1 + a_n)}{2}——台形の面積と同じ計算式
  • ガウスのトリック:「順方向と逆方向を足すと全て同じ値になる」という天才的な発想

次回は等比数列を扱います。差が一定ではなく、比が一定な数列です。たとえば「毎年1.05倍になる預金」がその例です。