約数の個数を求める - Project Eulerの数学

「Project Eulerの数学」としての第一弾として、約数の個数を求めたい。
数学的に厳密な証明ではなく、読んで納得できるような説明を目指したい。

自然数nが、素数2のべき乗で表せる場合

まず1については、約数は1のみであり、約数の個数は1となる。
2については、約数は1と2であり、約数の個数は2となる。ここで、2の仲間として、1, 2, 4, 8, 16, ... について考えたい。

n nの約数 nの約数の個数
1 = 20 1 1
2 = 21 1, 2 2
4 = 22 1, 2, 4 3
8 = 23 1, 2, 4, 8 4
16 = 24 1, 2, 4, 8, 16 5

つまり、n = 2a のとき、nの約数の個数は(a+1)個となっている。
2のべき乗の約数は、全て2のべき乗である。
約数を2bと表すと、bは、0 <= b <= a の範囲なので、約数の個数は(a + 1)個となる。

自然数nが、3以上の素数のべき乗で表せる場合

次は3の仲間として、1, 3, 9, 27, 81, ... について考える。

n nの約数 nの約数の個数
1 = 30 1 1
3 = 31 1, 3 2
9 = 32 1, 3, 9 3
27 = 33 1, 3, 9, 27 4
81 = 34 1, 3, 9, 27, 81 5

基数が3の場合も、n = 3a のとき、nの約数の個数は(a+1)個と表せる。
他の素数、5, 7, 11, ... についても同様であるので、一般化すると、素数 p について、n = pa のとき、nの約数の個数は(a+1)個となる。

自然数nが、合成数の場合

2つの素数の積について考えよう。nが6のとき、1, 2, 3, 6 がその約数であり、1、1に2か3のどちらかをかけたもの、1に2か3の両方をかけたもの、となる。

6の約数

  20 21
30 1 = 20 * 30 2 = 21 * 30
31 3 = 20 * 31 6 = 21 * 31

同様に、36については、次のように表せる。

36の約数

  20 21 22
30 1 = 20 * 30 2 = 21 * 30 4 = 22 * 30
31 3 = 20 * 31 6 = 21 * 31 12 = 22 * 31
32 9 = 20 * 32 18 = 21 * 32 36 = 22 * 32

36の約数を素因数分解し、2に着目すると、素因数に2を含まないもの、2を1つ含むもの、2を2つ含むものの、3種類に分類できる。
もう1つの素数 3 に着目すると、素因数に3を含まないもの、3を1つ含むもの、3を2つ含むものの、3種類に分類できる。素因数分解の一意性から、これらは9個の約数に対応している。

n = 6 = 21 * 31 のとき、約数は 2a * 3b (0 <= a <= 1, 0 <= b <= 1)で表せ、2 * 2 = 4個の約数を持つ。
n = 36 = 22 * 32 のとき、約数は 2a * 3b (0 <= a <= 2, 0 <= b <= 2)で表せ、3 * 3 = 9個の約数を持つ。

まとめ

一般化すると、p, q, r, ... を素数、a, b, c を自然数として、n = pa * qb * rc * ... のとき、約数の個数は (a + 1) * (b + 1) * (c + 1) と表せる。