以下程序找到给定数 n 的最小整数除数(大于 1)。它以一种直接的方式做到这一点,通过测试 n 是否可以被从 2 开始的连续整数整除。
(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))
我们可以如下测试一个数是否为素数:n 是素数当且仅当 n 是它自己的最小除数。
(define (prime? n)
(= n (smallest-divisor n)))
find-divisor 的最终测试基于这样一个事实,即如果 n 不是素数,则它必须有一个小于或等于 n 的除数。44 这意味着该算法只需要测试 1 和 n 之间的除数。因此,将 n 识别为素数所需的步骤数将具有增长顺序 (n)。