先将书本 33 页的 samllest-divisor
程序敲下来:
;;; p33-smallest-divisor.scm
(load "p33-divides.scm")
(load "p33-find-divisor.scm")
(define (smallest-divisor n)
(find-divisor n 2))
;;; p33-find-divisor.scm
(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)))))
;;; p33-divides.scm
(define (divides? a b)
(= (remainder b a) 0))
然后就可以开始找给定数的最小因子了:
1 ]=> (load "p33-smallest-divisor.scm")
;Loading "p33-smallest-divisor.scm"...
; Loading "p33-divides.scm"... done
; Loading "p33-find-divisor.scm"... done
;... done
;Value: smallest-divisor
1 ]=> (smallest-divisor 199)
;Value: 199
1 ]=> (smallest-divisor 1999)
;Value: 1999
1 ]=> (smallest-divisor 19999)
;Value: 7
可以看到, 199
和 1999
的最小因子都是它们自身,说明它们都是素数,另一方面, 19999
的最小因子是 7
,它不是素数。