Недавно, читая SICP, в одной сноске говорится:
Числа, которые обманывают тест Ферма, называются числами Кармайкла, и о них мало что известно, кроме того, что они чрезвычайно редки. Существует 255 чисел Кармайкла ниже 100 000 000. Наименьшими из них являются 561, 1105, 1729, 2465, 2821 и 6601. При проверке простоты очень больших чисел, выбранных наугад, вероятность наткнуться на значение, которое обманет тест Ферма, меньше, чем вероятность того, что космическое излучение вызовет компьютер допустил ошибку при выполнении «правильного» алгоритма. Если считать алгоритм неадекватным по первой причине, но не по второй, это иллюстрирует разницу между математикой и инженерией.
Сноска упоминается в:
К сожалению, это утверждение не совсем верно. Существуют числа, которые обманывают тест Ферма: числа n, которые не являются простыми, но обладают тем свойством, что an конгруэнтно модулю n для всех целых чисел a < n. Такие цифры встречаются крайне редко, поэтому тест Ферма на практике вполне надежен. [47]
Речь идет об алгоритме испытания Ферма:
; calculate: a^n mod n
(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))))
(define (fermat-test n)
(define (try-it a)
(= (expmod a n n) a))
(try-it (+ 1 (random (- n 1)))))
; check `times` count although it will fail for Carmichael numbers.
(define (fast-prime? n times)
(cond ((= times 0) true)
((fermat-test n) (fast-prime? n (- times 1)))
(else false)))
В Википедии приведено вышесказанное в качестве ссылки, когда говорится
В некоторых случаях вероятностные алгоритмы являются единственным практическим средством решения проблемы.
Может ли кто-нибудь, прочитавший эту книгу, сказать мне, что означает последнее предложение первой ссылки?
Возможно, эту проблему не уместно спрашивать здесь. Но поскольку SICP занимается программированием, я спросил здесь.
может лучше спросить по Информатика ?
На самом деле я вижу, что вы процитировали только третье предложение сноски. Но ответ на ваш вопрос находится во втором предложении сноски. Не могли бы вы отредактировать свой вопрос, включив в него это предложение?
@Stef Спасибо. Вопрос обновлен. Вы имеете в виду, что «первая причина» относится к «шансу наткнуться на значение, которое обманет тест Ферма»? Не могу понять стиль изложения автора. Что значит «неадекватно» в «неадекватно по первой причине»?
Да, точно. «Неадекватный» означает «ненадежный, не подходящий для решения определенной проблемы». Автор приводит две возможные причины, по которым критерий Ферма может быть неадекватным: (1) потому что он теоретически неверен, поскольку существуют числа Кармайкла; (2) Потому что космические лучи могут случайно воздействовать на электронику вашего компьютера при запуске алгоритма. Здесь (2) кажется смешным, но в этом и состоит точка зрения автора: высмеивать (1), указывая, что (2) более вероятно, чем (1).
@Stef Спасибо. Прочитав ваш комментарий, я понял, что хочет донести автор.





В этой цитате есть доля юмора.
Тест Ферма, если рассматривать его как алгоритм решения проблемы «Является ли n простым числом?», теоретически неверен.
Это неверно в том смысле, что существуют числа n, для которых n проходит тест Ферма, но n не является простым, поэтому выходные данные алгоритма для этих чисел неверны.
Однако автор указывает, что такие числа встречаются крайне редко: если n — случайное число, то вероятность того, что алгоритм ошибется на n по теоретическим соображениям, ниже, чем вероятность того, что компьютер, выполняющий алгоритм, выдаст неправильный результат для абсурдно-маловероятные физические причины.
Итак, чтобы назвать тест Ферма «неадекватным», потому что он не соответствует теоретическому определению правильности, нужно быть немного оторванным от реальности. Здесь «неадекватно по первой причине» означает «неадекватно, потому что теоретически неверно», а «неадекватно по второй причине» означает «может выйти из строя на практике из-за воздействия космических лучей на электронику», что не волнует ни одного инженера, за исключением разве что Инженеры НАСА и ЦЕРН.
Юмористический вывод состоит в том, что математика не волнует практическое выполнение, а только теоретическая правильность.
Это все немного насмешливо. Если вы используете тест Ферма в приложении, вы все равно должны знать, что числа Кармайкла существуют и что если состязательный пользователь может выбрать n, то тест Ферма может оказаться неадекватным. Но если n действительно случайно, а не выбрано, то существование чисел Кармайкла не должно иметь для вас значения.
Спасибо за более подробный ответ. Чтобы помочь будущим читателям, ключевой частью является 4-й абзац.
Привет. Ответ будет в том абзаце книги, к которому была сноска. Не могли бы вы отредактировать свой вопрос, чтобы процитировать этот абзац?