Модификация smallest-divisor
Процедура
smallest-divisor
в начале этого раздела проводит множество лишних проверок: после того, как она проверяет, делится ли число на 2, нет никакого смысла проверять делимость на другие четные числа. Таким образом, вместо последовательности 2, 3, 4, 5, 6 . . . , используемой для
test-divisor
, было бы лучше использовать 2, 3, 5, 7, 9 . . . . Чтобы реализовать такое улучшение, напишите процедуру
next
, которая имеет результатом 3, если получает 2 как аргумент, а иначе возвращает свой аргумент плюс 2. В
smallest-divisor
используйте
(next test-divisor)
вместо
(+ test-divisor 1)
. Используя процедуру
timed-prime-test
с модифицированной версией
smallest-divisor
, запустите тест для каждого из 12 простых чисел, найденных в упражнении
1.22
. Поскольку эта модификация снижает количество шагов проверки вдвое, Вы должны ожидать двукратного ускорения проверки. Подтверждаются ли эти ожидания? Если нет, то каково наблюдаемое соотношение скоростей двух алгоритмов, и как Вы объясните то, что оно отличается от 2?
Комментарии отсутствуют.