Процедура fermat-test
, представленная Структура и интерпретация компьютерных программ имеет порядковый номер роста, который был проверен мной и многими другими людьми эксперименты.Порядок роста теста Fermat в SICP
Что меня смущает примитивная процедура random
в ее определении. Означает ли это, что порядок роста random
составляет не более тета log (n)? После некоторой работы по поиску я все еще не уверен, можно ли написать генератор псевдослучайных чисел, порядок роста которого не больше, чем theta log (n).
Вот код:
(define (fermat-test n)
(define (try-it a)
(= (expmod a n n) a))
; Wait a second! What's the order of growth of `random`?
(try-it (+ 1 (random (- n 1)))))
, где expmod
имеет тета-из-журнала (п) порядок роста:
(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))
Не могли бы вы объяснить мне это?
- Если такой генератор псевдослучайных чисел существует, пожалуйста, покажите мне, как это работает.
- Если такой генератор псевдослучайных чисел не существует, скажите, пожалуйста, как
fermat-test
по-прежнему имеет порядок роста (т).