Project Euler: Problem 1 - 3か5の倍数になっている数字の合計

30分プログラム、その259。Project Eulerの問1を解いてみた。

10未満の自然数のうち、3もしくは5の倍数になっているものは 3,5,6,9の4つがあり、これらの合計は23になる。

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

数式で解く場合は、3の倍数の和と5の倍数の和から15の倍数を引けばいい。これを計算するのに結構時間がかかった。15の倍数の最大値は900だと思い込んでいた・・・。

\sum_{n=1}^{333}3n + \sum_{n=1}^{199}5n - \sum_{n=1}^{66}15n

使い方

gosh> (f 10)
23

gosh> (f 1000)
233168

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; sum.scm -
;;
;; Copyright(C) 2008 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2008/03/05 22:57:03
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use srfi-1)

(define (f)
  (apply +
	 (filter (lambda (n) 
		   (or (= 0 (modulo n 3))
		       (= 0 (modulo n 5))))
		 (iota 1000))))