SICP 实例 1.2.6 素数 寻找因子

(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 (prime? n)
  (= n (smallest-divisor n)))

(define (square x)
  (* x x))

(prime? 101)

如果N是合数,则必有一个小于或者等于根号N的素因子.

因为任何合数都可表示为两个或者更多个素数之积.

假如N是合数且其素因子都大于根号N,那么将产生矛盾:根号N*根号N>N.所以合数必有(至少)一个不大于根号N的素因子

posted @ 2017-11-24 13:29  R4mble  阅读(161)  评论(0编辑  收藏  举报