Solution to Problem 2 on ProjectEuler Using Scheme


Improve your writing skills in 5 minutes a day with the Daily Writing Tips email newsletter.

The problem:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

My solution using Scheme:

(define (remainder x y) (- x (* y (truncate (/ x y)))))

(define (fib a b limit)
                (if (< a limit)
                        (if (= 0 (remainder a 2))
                                (+ a (fib b (+ a b) limit))
                                (fib b (+ a b) limit))
                        0
                )
)

(display (fib 1 2 4000000))

One thought on “Solution to Problem 2 on ProjectEuler Using Scheme

  1. kronicmage

    We can abuse the fact that the next even fibonacci number is the previous one times phi cubed to create a much cleaner solution:

    (define (euler2 n [start 2] [sum 0])
    (if (>= start n)
    sum
    (euler2 n (inexact->exact (round (* start (expt (/ (+ 1 (sqrt 5)) 2) 3)))) (+ start sum))))
    (euler2 4000000)

    Reply

Leave a Reply to kronicmage Cancel reply

Your email address will not be published. Required fields are marked *