Величайшие математические задачи. Иэн Стюарт

Чтение книги онлайн.

Читать онлайн книгу Величайшие математические задачи - Иэн Стюарт страница 13

Автор:
Серия:
Издательство:
Величайшие математические задачи - Иэн Стюарт

Скачать книгу

то алгоритм принадлежит к классу P; в противном случае – не принадлежит. Грубо говоря, алгоритмы класса P полезны, тогда как те, что не принадлежат к этому классу, непрактичны. Существует, однако, промежуточная полоса своеобразной ничьей земли, где в ход идут другие соображения. Класс P получил название от понятия «полиномиальное время» – именно так замысловато математики говорят о постоянных степенях. Мы еще вернемся к теме эффективных алгоритмов позже, в главе 11.

      По стандартам класса P метод пробного деления работает из рук вон плохо. На школьном уровне, где для проверки предлагаются двух- или трехзначные числа, с ним все в порядке, но при работе со 100-значными числами он абсолютно безнадежен. В общем, пробное деление никак не укладывается в P-класс. Если быть точным, то время выполнения этого алгоритма для любого n-значного числа приблизительно равняется 10n/2, а эта величина растет быстрее, чем любая фиксированная степень n. С таким типом роста, известным как экспоненциальный, по-настоящему трудно иметь дело, это страшный сон любого, кто занимается вычислениями.

      До 1980-х гг. у всех известных алгоритмов проверки на простоту, за исключением вероятностных или тех, надежность которых оставалась недоказанной, время вычислений росло экспоненциально. Однако в 1983 г. был найден алгоритм, очень соблазнительно лежащий на ничьей земле вблизи P-территории: это уже упоминавшийся тест Адлемана – Померанса – Румели. Его улучшенная версия, разработанная Генри Коэном и Хендриком Ленстрой, имела время вычисления n в степени log log n, где log – обозначение логарифма. Технически log log n может быть сколь угодно большим, поэтому данный алгоритм не относится к P-классу. Однако это не мешает ему быть пригодным к практическому использованию: если n – гуголплекс, т. е. 1 с 10100 нулями, то log log n равен примерно 230. Старая шутка гласит: «Доказано, что log log n стремится к бесконечности, но никто никогда не видел, как он это делает».

      Первый тест на простоту, принадлежащий к P-классу, открыли в 2002 г. Маниндра Агравал и его студенты-дипломники Нирадж Каял и Нитин Саксена. В Примечаниях можно прочитать об этом немного подробнее{2}. Они придумали алгоритм и доказали, что время его выполнения растет пропорционально не более чем n12; очень скоро эта величина была уменьшена до n7,5. Однако, несмотря на то что их алгоритм относится к P-классу и, соответственно, считается «эффективным», его преимущества не проявляются до тех пор, пока n не становится очень и очень большим. По идее этот алгоритм должен побить тест Адлемана – Померанса – Румели, когда число знаков в n приблизится к 101000. Но такое большое число невозможно разместить не только в память компьютера, но и вообще в известной Вселенной. Зато теперь мы точно знаем, что алгоритмы P-класса для проверки простоты числа существуют. Ясно, что поиск лучших алгоритмов в этой категории – дело стоящее. Ленстра и Померанс снизили степень

Скачать книгу


<p>2</p>

Алгоритм Агравала – Каяла – Саксены выглядит так:

• Если n представляет собой точную степень меньшего числа, выдаем СОСТАВНОЕ.

• Находим наименьшее r, такое, что наименьшая степень r, равная 1 по модулю n, больше или равна (log n)².

• Если какое-либо число, меньшее или равное r, имеет общий делитель с n, выдаем СОСТАВНОЕ.

• Если n меньше или равно r, выдаем ПРОСТОЕ.

• Для всех целых чисел a от 1 до определенного предела проверяем, совпадает ли многочлен (x + a)n с многочленом xn + a по модулю n и по модулю xr − 1. Если в обоих случаях ответ положительный, выдаем СОСТАВНОЕ.

• Выдаем ПРОСТОЕ.