1.23
练习 1.23: 在本节开始时给出的那个 smallest-divisor 过程做了许多无用检查: 在它检查了一个数是否能被 2 整除之后,实际上已经完全没有必要再检查它是否能被任何偶数整除了。这说明 test-divisor 所用的值不应该是 2,3,4,5,6,……,而应该是 2,3,5,7,9,……。 请实现这种修改。其中应定义一个过程 next,用 2 调用它时返回 3,否则就返回其输入值加 2.修改 smallest-divisor 过程,使它去使用 (next test-divisor) 而不是 (+ test-divisor 1)。让 timed-prime-test 结合这个 smallest-divisor 版本,运行练习 1.22 里的 12 个找素数的测试。因为这一修改使检查的步数减少一半,你可能期望它的运行速度快一倍。实际情况符合这一预期吗?如果不符合,你所观察到的两个算法速度的比值是什么?你如何解释这一比值不是 2 的事实?