スキップしてメイン コンテンツに移動

Project Euler - Problem 1

まず1問目から。日本語訳を公開してくれているWikiがあるのでそちらのページもリンクすることにします。

問題

  • 原文

    Find the sum of all the multiples of 3 or 5 below 1000.

  • 日本語訳

    1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。

解答

最初の問題だけあって、別段難しくもありません。ほとんどFizzBuzz問題です。 0から999まで、公差1の等差数列から3あるいは5の倍数を抽出して合計すればいいわけです。 Scheme(Gauche)で書いてみました。multiple-of?nmの倍数かどうかを示す述語で、iotaはSRFI-1に収録されているリスト構築子です。

(use srfi-1)
(define (multiple-of? n m) (zero? (modulo n m)))
(define (solve)
  (apply + (filter (lambda (n) (or (multiple-of? n 3) (multiple-of? n 5)))
                   (iota 1000))))
(define (main argv)
  (display (solve))
  (newline))

コメント