Книга: Золотой билет

Простые числа. Разложение на множители

Простые числа. Разложение на множители

Число 15 можно разложить на множители, т. е. представить в виде произведения других натуральных чисел, двумя способами: 15 ? 1 и 5 ? 3. Для числа 24 способов уже гораздо больше, например – 24 ? 1, 12 ? 2, 8 ? 3, 6 ? 4. А вот число 17 иначе как в виде 17 ? 1 не представишь: оно простое, т. е. делится только на себя и на единицу. Множество простых чисел бесконечно; первые восемь его представителей – 2, 3, 5, 7, 11, 13, 17, 19. Самое большое простое число, известное на момент написания этой книги, состоит из 12978189 цифр и начинается так: 316470269330255923143453723…

Как понять, является данное число простым или нет? К примеру, число 1123467619? Первое, что приходит в голову, – это методично перебрать все числа от 2 до 1123467618, пытаясь поделить на них исходное число. На самом деле достаточно будет дойти лишь до квадратного корня из 1123467619, т. е. перебрать все числа от 2 до 33518. Не такая уж и ужасная перспектива! А что, если взять число побольше? Например, такое:

8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623

Оно простое, как вы думаете?

Первые алгоритмы проверки на простоту придумали еще в Древней Греции, однако для больших чисел они не годились. В семидесятых годах прошлого века появились вероятностные алгоритмы, которые справлялись с числами из нескольких сот цифр. Проверка простоты осуществлялась при помощи серии тестов с использованием случайных чисел и некоторых методов теории чисел. Новые алгоритмы давали неплохие результаты, однако не гарантировали стопроцентную точность. Наконец, в 2002 году индийский профессор Маниндра Агравал вместе со своими студентами Нираджем Каялом и Нитином Саксеной создал точный и эффективный алгоритм распознавания простоты без использования случайных величин, доказав тем самым, что задача проверки числа на простоту лежит в классе P.

Алгоритм Агравала позволяет установить, что число 8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623

не является простым, но при этом не дает нам ни одного его делителя.

Удивительно, правда? Вопрос о простоте числа решается довольно быстро, а вот для поиска делителей эффективный алгоритм пока не придумали.

Задача разложения на множители принадлежит классу NP, поскольку при наличии готовых множителей их произведение можно посчитать очень легко. Например, умножив

84 578 657 802 148 566 360 817 045 728 307 604 764 590 139 606 051

на

97 823 979 291 139 750 018 446 800 724 120 182 602 777 022 032 973,

мы получим

8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623.

Маловероятно, что эта задача принадлежит классу P. Впрочем, в ее NP-полноту ученые тоже не верят: разложить число на множители, конечно, очень трудно, однако решить проблему выполнимости или раскраски карт, скорее всего, будет на порядок труднее.

Задачи распознавания простоты и поиска делителей важны не только для математиков, которые жить без своих чисел не могут. К примеру, практически неразложимые на множители числа используются в современной криптографии. В восьмой главе мы коснемся этой темы подробнее.

Оглавление книги


Генерация: 1.068. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз