## November 29, 2008

at
Saturday, November 29, 2008
Labels:
Computer Science,
Lisp,
Project Euler
Posted by
Billy

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million.

This solution tests if a number is prime by testing if the number's smallest divisor is equal to itself. It then loops through all the odd numbers by two and sums the primes.

;;; Functions for testing if a number is prime

(defun square (x) (* x x))

(defun dividesp (a b)

(zerop (mod b a)))

(defun find-divisor (n test-divisor)

(cond ((> (square test-divisor) n) n)

((dividesp test-divisor n) test-divisor)

(t (find-divisor n (+ test-divisor 1)))))

(defun smallest-divisor (n)

(find-divisor n 2))

(defun primep (n)

(= n (smallest-divisor n)))

;;; End of prime functions

(defun sum-of-primes-below (num)

"Returns the sum of all the prime numbers below num"

(+ 2 (loop for i from 3 to num by 2 when (primep i) sum i)))

(defun euler-10 ()

(sum-of-primes-below 2000000))

Subscribe to:
Post Comments (Atom)

## 0 comments:

Post a Comment