Project Euler を始めてみた

About - Project Euler
プログラムして解いていく,数学の問題集.数学の問題といっても,必要なのはほとんどひらめきだけで,定理や定石などは必要ない.力押しでも解けるけれど,美しい解法も必ずあります,と思われる問題が並んでいて,久々に頑張って考えてしまった.
例えば,Problem 5 はこんな問題

What is the smallest number divisible by each of the numbers 1 to 20?
和訳: 1から20までのいずれの整数でも割りきれる整数で最小のものは?

それぞれの整数を素因数分解して,必要最小限な素因数を求めれば解けるけれど,それはちょっとなあ,という感じ.
自分は,以下のように解いてみた.

#include <stdio.h>

int main(int argc, char** argv) {
  const int TARGET = 20;
  int factor[TARGET+1];
  int ans = 1;
  for (int i = 2; i <= TARGET; ++i) {
    factor[i] = i;
    for (int j = 2; j < i; ++j)
      if (factor[i] % factor[j] == 0)
        factor[i] /= factor[j];
    ans *= factor[i];
  }
  printf("answer = %d\n", ans);
  return 0;
}

まあ結局,素因数分解みたいなことはしているのですが.なかなかシンプルに書けたのではないかと自画自賛
サイトでは他の人々の解答も見られるのだけれど,これがまたすごい.「なるほど賢い」と唸ってしまう解答,知らない言語で読めないけれど異常なほど短い解答,などなど.一つの問題で二度楽しめる.
この後も,楽しみながらコツコツやっていきたいと思う.