练习 1.21

先将书本 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

可以看到, 1991999 的最小因子都是它们自身,说明它们都是素数,另一方面, 19999 的最小因子是 7 ,它不是素数。

讨论

blog comments powered by Disqus