SICP 1.22

(use srfi-19)
(define (timed-prime-test n)

  (define (start-prime-test n start-time)
	(if (prime? n)
		(report-prime start-time)))

  (define (report-prime start-time)
	(display " *** ")
	(display (time-difference (current-time) start-time)))

  (define (prime? n)
	(= n (smallest-divisor n)))

  (define (smallest-divisor n)
	(find-divisor n 2))

  (define (find-divisor n test-divisor)
	(cond ((> (square test-divisor) n) n)
		  ((divides? test-divisor n) test-divisor)
		  (else (find-divisor n (+ test-divisor 1)))))

  (define (divides? a b)
	(= (modulo b a) 0))

  (define (square n)
	(* n n))

  (display n)
  (start-prime-test n (current-time)))

(timed-prime-test 90000000019) ; prime
(timed-prime-test 90000000020) ; non prime
(timed-prime-test 300000000077) ; prime
(timed-prime-test 300000000078) ; non prime