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

数列の和の公式——Σ記号とべき乗の和

シグマ記号 Σ とは

たとえば、クラス30人のテストの合計点を表したいとします。a1+a2+a3++a30a_1 + a_2 + a_3 + \cdots + a_{30} と書くのは面倒ですよね。さらに100人、1000人になったら?

そこで数学者は省略記号を発明しました。シグマ記号Σ\Sigma、ギリシャ文字のS。Sumの頭文字)を使うと、どんなに長い和もコンパクトに書けます。

k=1nak=a1+a2++an\sum_{k=1}^{n} a_k = a_1 + a_2 + \cdots + a_n

読み方:「kk11 から nn まで変化するときの aka_k の総和」。Σ\Sigma の下に「始まり」、上に「終わり」、右に「何を足すか」を書く——それだけです。

Σ の基本性質

「2つの数列を足してから合計」しても「それぞれ合計してから足す」しても同じ結果になります。スーパーのレシートで「野菜の合計 + 肉の合計 = 全品目の合計」と同じ発想です。

Σ(aₖ + bₖ) = Σaₖ + Σbₖ   (線形性)
Σ c·aₖ = c · Σaₖ          (定数倍)
Σ c = c·n                  (定数の和)

公式1:Σk = n(n+1)/2(三角数)

「1から100まで全部足すといくつか?」——小学生のガウスが一瞬で答えたという有名な話があります。前回の等差数列の和の公式がそのまま使えます。

k=1nk=1+2+3++n=n(n+1)2\sum_{k=1}^{n} k = 1 + 2 + 3 + \cdots + n = \frac{n(n+1)}{2}

この値は三角数と呼ばれます。nn 段の三角形に点を並べると、ちょうどこの数になるためです。

証明(等差数列の和として): 初項 11、末項 nn、項数 nn の等差数列の和なので Sn=n(1+n)/2S_n = n(1+n)/2。「順方向と逆方向を足すと全て (n+1)(n+1) になる」というガウスのトリックと同じ計算です。

n=5n = 5 のとき:1+2+3+4+5=15=5×6/21+2+3+4+5 = 15 = 5 \times 6 / 2


三角数の視覚化

点を三角形状に並べると k=1nk\sum_{k=1}^{n} k の値が自然に現れます。1段目に1個、2段目に2個、3段目に3個……と積んでいくと、全部で「三角数」個の点になります。マウスを動かして nn を変えてみましょう。

三角数 Σk:点が三角形に並ぶ様子。マウスで n を変えよう
var n, total, row, col, dotR, ox, oy, spacing;

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

n = Math.max(1, Math.min(15, Math.round((mx / W) * 14) + 1));
total = n * (n + 1) / 2;

dotR = Math.min(12, Math.floor(260 / (n * 1.8)));
spacing = dotR * 2.5;
ox = W / 2;
oy = 40;

var rowCount = 0;
for (row = 1; row <= n; row++) {
  var rowY = oy + (row - 1) * spacing;
  var rowStartX = ox - (row - 1) * spacing / 2;
  for (col = 0; col < row; col++) {
    var cx = rowStartX + col * spacing;
    var t = (rowCount / (total - 1 || 1));
    var red = Math.round(96 + t * 159);
    var grn = Math.round(165 - t * 35);
    var blu = Math.round(250 - t * 100);
    ctx.fillStyle = 'rgb(' + red + ',' + grn + ',' + blu + ')';
    ctx.beginPath();
    ctx.arc(cx, rowY, dotR, 0, Math.PI * 2);
    ctx.fill();
    rowCount++;
  }
  // row label
  ctx.fillStyle = '#94a3b8';
  ctx.font = '11px monospace';
  ctx.textAlign = 'right';
  ctx.fillText(row, ox - (row - 1) * spacing / 2 - dotR - 4, rowY + 4);
}

ctx.fillStyle = '#fbbf24';
ctx.font = '15px monospace';
ctx.textAlign = 'center';
ctx.fillText('n = ' + n + '  Σk = ' + n + '×' + (n+1) + '/2 = ' + total, W/2, 300);

requestAnimationFrame(loop);
}
loop();

公式2:Σk² = n(n+1)(2n+1)/6(正方数の和)

k2k^2(k の二乗)」とは、一辺が kk の正方形の面積です。12=11^2 = 122=42^2 = 432=93^2 = 9……と、正方形を1段ずつ大きくしていくイメージです。

これらの面積を全部足すと、積み重なった正方形の塔ができます——これが正方錐(四角錐)のような立体の体積に対応しています。

k=1nk2=12+22+32++n2=n(n+1)(2n+1)6\sum_{k=1}^{n} k^2 = 1^2 + 2^2 + 3^2 + \cdots + n^2 = \frac{n(n+1)(2n+1)}{6}

分母が「6」なのが少し覚えにくいですが、「n(n+1)n(n+1) は必ず偶数になるので、6で割り切れる」と覚えると安心です。

n=4n = 4 のとき:1+4+9+16=30=4×5×9/61 + 4 + 9 + 16 = 30 = 4 \times 5 \times 9 / 6

Σk²:正方形を積み重ねた視覚化。マウスで n を変えよう
var n, i, squareSize, ox, oy, maxSize;

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

n = Math.max(1, Math.min(10, Math.round((mx / W) * 9) + 1));
maxSize = n;

var total = n * (n + 1) * (2 * n + 1) / 6;
var scale = Math.min(18, Math.floor(240 / (n * 1.5)));
ox = W / 2;
oy = 280;

// draw stacked squares side by side, isometric style
for (i = n; i >= 1; i--) {
  squareSize = i * scale;
  var xPos = ox - squareSize / 2;
  var stackH = 0;
  for (var j = 1; j <= n; j++) { if (j < i) stackH += j * scale; }
  var yPos = oy - i * scale - stackH;

  var t = (i - 1) / (n - 1 || 1);
  var red = Math.round(59 + t * 196);
  var grn = Math.round(130 + t * 70);
  var blu = Math.round(246 - t * 100);
  ctx.fillStyle = 'rgb(' + red + ',' + grn + ',' + blu + ')';
  ctx.fillRect(xPos, yPos, squareSize, squareSize);
  ctx.strokeStyle = '#0d1117';
  ctx.lineWidth = 1;
  ctx.strokeRect(xPos, yPos, squareSize, squareSize);

  ctx.fillStyle = '#fff';
  ctx.font = Math.max(9, scale - 2) + 'px monospace';
  ctx.textAlign = 'center';
  if (squareSize > 16) {
    ctx.fillText(i + '²=' + (i*i), ox, yPos + squareSize / 2 + 4);
  }
}

ctx.fillStyle = '#fbbf24';
ctx.font = '14px monospace';
ctx.textAlign = 'center';
ctx.fillText('n=' + n + '  Σk² = ' + n + '×' + (n+1) + '×' + (2*n+1) + '/6 = ' + total, W/2, 308);

requestAnimationFrame(loop);
}
loop();

公式3:Σk³ = [n(n+1)/2]²(三角数の平方)

ここからが最も驚くべき公式です——立方数(1³, 2³, 3³, …)の和が、自然数の和(1+2+3+…)の2乗にぴったり一致します!

k=1nk3=(n(n+1)2)2=(k=1nk)2\sum_{k=1}^{n} k^3 = \left(\frac{n(n+1)}{2}\right)^2 = \left(\sum_{k=1}^{n} k\right)^2

「立方数の和 = 三角数の2乗」——一見なんの関係もなさそうな二つがイコールになるのが、数学の面白いところです。

n=3n = 3 のとき:13+23+33=1+8+27=36=(1+2+3)2=621^3 + 2^3 + 3^3 = 1 + 8 + 27 = 36 = (1+2+3)^2 = 6^2

実際にいくつか確認してみると信じやすくなります:

nnk3\sum k^3(k)2\left(\sum k\right)^2
111
299
33636
4100100
5225225

まとめ表

これらの公式を一覧にまとめます。どれも「毎回1つずつ計算するのではなく、nn を代入するだけで答えが出る」のがポイントです——たとえばコンピュータのプログラムで「ループが nn 回回るとき、全部で何回の操作か」を解析するときに大活躍します。

公式計算量
k=1n1\sum_{k=1}^n 1nnO(1)O(1)
k=1nk\sum_{k=1}^n kn(n+1)2\dfrac{n(n+1)}{2}O(1)O(1)
k=1nk2\sum_{k=1}^n k^2n(n+1)(2n+1)6\dfrac{n(n+1)(2n+1)}{6}O(1)O(1)
k=1nk3\sum_{k=1}^n k^3[n(n+1)2]2\left[\dfrac{n(n+1)}{2}\right]^2O(1)O(1)

これらの公式はアルゴリズムの計算量解析(ループが nn 回回るとき、合計で何回の操作か)でも頻繁に使われます。


応用:Σ の分解

複雑な和も Σ\Sigma の線形性と上記の公式で計算できます。「展開してから、それぞれ公式を使う」という手順です。

k=110k(k+1)=k=110k2+k=110k=1011216+10112=385+55=440\sum_{k=1}^{10} k(k+1) = \sum_{k=1}^{10} k^2 + \sum_{k=1}^{10} k = \frac{10 \cdot 11 \cdot 21}{6} + \frac{10 \cdot 11}{2} = 385 + 55 = 440


まとめ

  • Σ 記号:数列の和を「kk が○から○まで動くとき」とコンパクトに書く記法。長い和を省略できる便利なツール
  • 三角数k=n(n+1)/2\sum k = n(n+1)/2——三角形に点を並べると自然に出てくる数。ガウスの計算トリックと同じ
  • 正方数の和k2=n(n+1)(2n+1)/6\sum k^2 = n(n+1)(2n+1)/6——正方形(面積 k2k^2)を積み重ねた塔の総面積
  • 立方数の和k3=(k)2\sum k^3 = \left(\sum k\right)^2——三角数の2乗という驚くべき美しい関係
  • これらは数学的帰納法で厳密に証明できる(第5回で扱います)

次回は漸化式——数列を「前の項から次の項を作る規則」で定義する方法を学びます。