問題1.21

メシ食ったあと、問題を解くのは辛い…

僕の解答

(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)
	(= (remainder b a) 0))

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

(define (println x)
	(display x)
	(newline))

(println (smallest-divisor 199))
(println (smallest-divisor 1999))
(println (smallest-divisor 19999))

とりあえず、199、1999、7っと。
Fermatテストは使わなくていいんだよね…

所感

とりあえず合ってた。まあ。