てきとうなメモ

本の感想とか技術メモとか

高度合成数

360 in a circle, 60 minutes and 60 seconds… What is so special about 60?

なぜ60進法が用いられてきたのかというと,よく60は10よりも約数が多いからだという話をよく聞く.しかし,60は10よりも大きいのだから直接比較するのはフェアではない気がする.ので,ちょっとスクリプトを書いてみた.

約数の数を求めるスクリプトなのだが,全く効率は考えずに計算している.

for my $i (1 .. 1000) {
  my $div = 0;
  for my $j (1 .. $i/2) {
    if ($i % $j == 0) {
      $div++;
    }
  }
  $div++;
  printf "%d: %d\n", $i, $div;
}

出力はこんな感じ

1: 1
2: 2
3: 2
4: 3
5: 2
6: 4
7: 2
8: 4
9: 3
10: 4
11: 2
.
.
57: 4
58: 4
59: 2
60: 12
61: 2
62: 4
.
.
358: 4
359: 2
360: 24
361: 3
362: 4

1から10までだと10は約数の数が最大である.だから,そんなに約数が少ない数だとは思えない

これだとちょっと分かりにくいので,約数の個数の最大値が変化するところを出力してみた.

my $max = 0;
my @max = ();
for my $i (1 .. 1000) {
  my $div = 0;
  for my $j (1 .. $i/2) {
    if ($i % $j == 0) {
      $div++;
    }
  }
  $div++;
  if ($div > $max) {
    $max = $div;
    push @max, "$i:$div";
  }
  printf "%d: %d\n", $i, $div;
}  
print join(',', @max), "\n";

出力はこんな感じ

1:1,2:2,4:3,6:4,12:6,24:8,36:9,48:10,60:12,120:16,180:18,240:20,360:24,720:30,840:32 

こう見ると60も360も最大値を更新している数であることがわかる.最大値を更新しているという点では,10よりも約数が相対的に多いような気がする.

で,この

2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840

の値を高度合成数と呼ぶらしい.