約数と倍数——整数の分解と構造
整除・約数・倍数
「12 個のチョコレートを何人かで同じ数ずつ分けたい」——このとき、余りなく分けられる人数が「12 の約数」です。1 人、2 人、3 人、4 人、6 人、12 人なら余りなく分けられる——これが「割り切れる」という関係です。
整数 ()に対して、( は整数)となるとき、「 は を割り切る」「 は の約数(factor / divisor)」「 は の倍数(multiple)」と言います。
記号:(「 が を割る」)
例:、、
約数の個数
正の整数 の正の約数の個数を と書きます——「 を余りなく割り切れる正の整数は何個あるか」:
- ( が素数のとき)
- (約数:1, 2, 3, 4, 6, 12)
の約数を求めるには から まで割り切れるか調べ、各約数 に対して もペアとして記録します——「 が約数なら も必ず約数」だから まで調べれば十分です。計算量 。
因数ペアの視覚化
任意の正の整数 は ()という長方形として表現できます——「縦 、横 の長方形を、面積が になるように作る」。マウスを左右に動かして から の整数を選び、その因数ペアをすべての長方形として確認しましょう。
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 |
| 6 | 2 と 3 の両方で割れる |
| 8 | 下3桁が 8 の倍数 |
| 9 | 各桁の和が 9 の倍数 |
| 10 | 末尾が 0 |
例:
- 末尾が → 2で割れる ✓
- 各桁の和: → 3で割れる ✓(かつ9でも割れる)
- 2と3の両方 → 6で割れる ✓
約数の総和・積
約数の総和
「 のすべての約数を足し合わせると?」——素因数分解の形が分かっていれば、公式で一気に計算できます:
のとき:
例:
確認: ✓
完全数
「自分自身を除く約数の和がちょうど自分に等しい」——これほど自己充足した数を完全数といいます:
、つまり「自分自身を除く約数の和が自分に等しい」。
- ✓
- ✓
- 、…
完全数が無限に存在するかどうかは、現在も未解決問題です!
倍数の性質
倍数の閉じた性質
「 の倍数どうしを足しても引いても、 の倍数のまま」—— かつ ならば および 。
証明:、 とすると 。
最小公倍数
「 と の両方の倍数の中で、一番小さいもの」—— は の倍数かつ の倍数の中で最小のものです:
例:——「4 と 6 の最小公倍数は 12(4 の倍数でも 6 の倍数でもある最小の数)」。
まとめ
- 約数(divisor):、つまり となる整数 ——「割り切れる数」
- 整除判定規則:2・3・5・9は桁の特徴で素早く判断できる——「全部計算しなくていい」
- 約数を求めるには まで調べればよい()——「 が約数なら も約数」
- 完全数:約数の和が2倍になる特殊な数——「未解決の神秘」
- 最小公倍数:——「最大公約数と最小公倍数はセットで覚える」
次回は最大公約数とユークリッド互除法——GCDを高速に求めるアルゴリズムを学びます。