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

約数と倍数——整数の分解と構造

整除・約数・倍数

「12 個のチョコレートを何人かで同じ数ずつ分けたい」——このとき、余りなく分けられる人数が「12 の約数」です。1 人、2 人、3 人、4 人、6 人、12 人なら余りなく分けられる——これが「割り切れる」という関係です。

整数 a,ba, bb0b \neq 0)に対して、a=b×qa = b \times qqq は整数)となるとき、「bbaa を割り切る」「bbaa約数(factor / divisor)」「aabb倍数(multiple)」と言います。

記号:bab \mid a(「bbaa を割る」)

例:3123 \mid 124244 \mid 245135 \nmid 13


約数の個数

正の整数 nn正の約数の個数d(n)d(n) と書きます——「nn を余りなく割り切れる正の整数は何個あるか」:

  • d(1)=1d(1) = 1
  • d(p)=2d(p) = 2pp が素数のとき)
  • d(12)=6d(12) = 6(約数:1, 2, 3, 4, 6, 12)
  • d(pk)=k+1d(p^k) = k + 1

nn の約数を求めるには 11 から n\sqrt{n} まで割り切れるか調べ、各約数 dd に対して n/dn/d もペアとして記録します——「dd が約数なら n/dn/d も必ず約数」だから n\sqrt{n} まで調べれば十分です。計算量 O(n)O(\sqrt{n})


因数ペアの視覚化

任意の正の整数 nnn=a×bn = a \times baba \le b)という長方形として表現できます——「縦 aa、横 bb の長方形を、面積が nn になるように作る」。マウスを左右に動かして 11 から 6060 の整数を選び、その因数ペアをすべての長方形として確認しましょう。

因数ペアの長方形表示:マウスで 1〜60 の整数を選ぼう。素数は長方形が 1 種類(横長のみ)で、合成数は複数の長方形が現れる。正方形になる場合は平方数(4、9、16…)。
var n, factors, i, j, cols, rectW, rectH, ox, oy;

function getFactors(num) {
var result = [];
for (var d = 1; d * d <= num; d++) {
  if (num % d === 0) {
    result.push([d, num / d]);
  }
}
return result;
}

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

n = Math.max(1, Math.min(60, Math.round((mx / W) * 59) + 1));
factors = getFactors(n);

ctx.fillStyle = '#e2e8f0';
ctx.font = 'bold 18px monospace';
ctx.textAlign = 'center';
ctx.fillText('n = ' + n + '  約数の個数: ' + (factors.length === 1 && factors[0][0] === factors[0][1] ? 1 : factors.length * 2 - (factors[factors.length-1][0] === factors[factors.length-1][1] ? 1 : 0)), W/2, 26);

// list factor pairs
ctx.font = '12px monospace';
ctx.textAlign = 'left';
ctx.fillStyle = '#94a3b8';
ctx.fillText('因数ペア:', 20, 50);
for (i = 0; i < factors.length; i++) {
  ctx.fillStyle = '#60a5fa';
  ctx.fillText(factors[i][0] + ' × ' + factors[i][1], 20 + i * 80, 68);
}

// draw rectangles
var maxFactor = Math.min(n, 12);
var scale = Math.floor(160 / maxFactor);
cols = Math.min(factors.length, 5);
ox = (W - cols * (maxFactor * scale + 20)) / 2;
oy = 90;

var colors = ['#3b82f6','#8b5cf6','#22c55e','#f97316','#ec4899','#14b8a6'];

for (i = 0; i < Math.min(factors.length, 5); i++) {
  var fa = factors[i][0];
  var fb = factors[i][1];
  var rw = Math.min(fa, maxFactor) * scale;
  var rh = Math.min(fb, maxFactor) * scale;
  var rx = ox + i * (maxFactor * scale + 20);
  var ry = oy + (maxFactor * scale - rh);

  ctx.fillStyle = colors[i % colors.length] + '55';
  ctx.fillRect(rx, ry, rw, rh);
  ctx.strokeStyle = colors[i % colors.length];
  ctx.lineWidth = 2;
  ctx.strokeRect(rx, ry, rw, rh);

  ctx.fillStyle = '#fff';
  ctx.font = 'bold 12px monospace';
  ctx.textAlign = 'center';
  ctx.fillText(fa + '×' + fb, rx + rw/2, ry + rh/2 + 4);
}

// divisibility rules hint
ctx.fillStyle = '#64748b';
ctx.font = '12px monospace';
ctx.textAlign = 'left';
var hints = [];
if (n % 2 === 0) hints.push('偶数');
if (n % 3 === 0) hints.push('3の倍数');
if (n % 5 === 0) hints.push('5の倍数');
if (hints.length > 0) {
  ctx.fillStyle = '#fbbf24';
  ctx.fillText(hints.join('・'), 20, 305);
}

requestAnimationFrame(loop);
}
loop();

整除の判定規則

「528 が 3 で割り切れるかを確かめるのに、528 ÷ 3 を計算しなくても——桁の数字を全部足して 3 の倍数かどうか見るだけでよい(5+2+8=15、15÷3=5 余りなし)」——いくつかの数の整除性は、全桁の計算をせずに手早く確認できます。

割り切れる数条件
2末尾が偶数(0, 2, 4, 6, 8)
3各桁の和が 3 の倍数
4下2桁が 4 の倍数
5末尾が 0 か 5
62 と 3 の両方で割れる
8下3桁が 8 の倍数
9各桁の和が 9 の倍数
10末尾が 0

例:n=252n = 252

  • 末尾が 222で割れる
  • 各桁の和:2+5+2=92+5+2 = 93で割れる ✓(かつ9でも割れる)
  • 2と3の両方 → 6で割れる

約数の総和・積

約数の総和

nn のすべての約数を足し合わせると?」——素因数分解の形が分かっていれば、公式で一気に計算できます:

n=p1a1p2a2n = p_1^{a_1} p_2^{a_2} \cdots のとき:

σ(n)=i(1+pi+pi2++piai)=ipiai+11pi1\sigma(n) = \prod_{i} (1 + p_i + p_i^2 + \cdots + p_i^{a_i}) = \prod_i \frac{p_i^{a_i+1}-1}{p_i-1}

例:σ(12)=σ(223)=(1+2+4)(1+3)=7×4=28\sigma(12) = \sigma(2^2 \cdot 3) = (1+2+4)(1+3) = 7 \times 4 = 28

確認:1+2+3+4+6+12=281+2+3+4+6+12 = 28

完全数

「自分自身を除く約数の和がちょうど自分に等しい」——これほど自己充足した数を完全数といいます:

σ(n)=2n\sigma(n) = 2n、つまり「自分自身を除く約数の和が自分に等しい」。

  • 6=1+2+36 = 1 + 2 + 3
  • 28=1+2+4+7+1428 = 1 + 2 + 4 + 7 + 14
  • 49649681288128

完全数が無限に存在するかどうかは、現在も未解決問題です!


倍数の性質

倍数の閉じた性質

aa の倍数どうしを足しても引いても、aa の倍数のまま」——ama \mid m かつ ana \mid n ならば a(m+n)a \mid (m+n) および a(mn)a \mid (m-n)

証明:m=aqm = aqn=arn = ar とすると m±n=a(q±r)m \pm n = a(q \pm r)

最小公倍数

aabb の両方の倍数の中で、一番小さいもの」——lcm(a,b)\text{lcm}(a, b)aa の倍数かつ bb の倍数の中で最小のものです:

lcm(a,b)=abgcd(a,b)\text{lcm}(a,b) = \frac{a \cdot b}{\gcd(a,b)}

例:lcm(4,6)=24gcd(4,6)=242=12\text{lcm}(4, 6) = \dfrac{24}{\gcd(4,6)} = \dfrac{24}{2} = 12——「4 と 6 の最小公倍数は 12(4 の倍数でも 6 の倍数でもある最小の数)」。


まとめ

  • 約数(divisor):bab \mid a、つまり a=bqa = bq となる整数 bb——「割り切れる数」
  • 整除判定規則:2・3・5・9は桁の特徴で素早く判断できる——「全部計算しなくていい」
  • 約数を求めるには n\sqrt{n} まで調べればよい(O(n)O(\sqrt{n}))——「dd が約数なら n/dn/d も約数」
  • 完全数:約数の和が2倍になる特殊な数——「未解決の神秘」
  • 最小公倍数lcm(a,b)=ab/gcd(a,b)\text{lcm}(a,b) = ab / \gcd(a,b)——「最大公約数と最小公倍数はセットで覚える」

次回は最大公約数とユークリッド互除法——GCDを高速に求めるアルゴリズムを学びます。