Chapter 01

Problem 1: Multiple of 3 or 5

aoi.iter
aoi.iter
2022.06.23に更新
このチャプターの目次

2022/06/21

https://projecteuler.net/problem=1

問題

10 未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の 4 つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

考察

まず 1000 未満の数列を作成し、それを 3 か 5 の倍数になっている数値をフィルターする。
fold を用いて数列の合計値をとればよい

1000 未満の数列なので通常のリストで十分だが、サイズが大きくなっても対応できるように遅延シーケンスを利用する

解答

; https://projecteuler.net/problem=1
(use util.stream)

(define (divisible? n x)
                    (zero? (mod n x)))

(define (answer n)
  (stream-fold + 0 (stream-filter (lambda (x) (or (divisible? x 3)
                                                  (divisible? x 5)))
                                  (stream-range 1 n))))

(answer 10)
; => 23
(answer 1000)
; => 233168

感想

N/A

参考資料

N/A