>
2.2. Піднесення до степеня. Розглянемо задачу обчислення функції у довільному кільці. Безхитрісна прямолінійна програма для цієї функції має складність d — 1:
У подальших розділах неодноразово виникатиме задача
Піднесення до степеня за модулем
Задано: .
Обчислити: .
Завжди можна вважати, що d < п. Інакше можна скористатися теоремою Ойлера, щоб понизити показник. Якщо ми використаємо для розв'язання цієї задачі наведену вище прямолінійну програму (з множенням в кільці ), то отримаємо експоненційний алгоритм. Справді, коли d не набагато менше, ніж п , то довжина входу має порядок , а кількість операцій множення має порядок п .
На щастя, є значно ощадніший алгоритм, який був відомий ще до нашої ери в Індії. Ми називатимемо його бінарним методом. Опишемо цей метод у вигляді прямолінійної програми для обчислення функції .
Подамо показник у двійковій системі числення: , де і . Для спрощення запису дозволимо одній команді програми виконувати до двох множень і покладемо . Тоді -та команда задається так:
Всього команд . Результатом виконання останньої є
Всього витрачається множень (множення першої команди не є необхідним — вона включена для однорідності). Наведену прямолінійну програму можна легко конвертувати в алгоритм у сенсі пункту 1.2, чи в програму на будь-якій мові програмування, що розв'язує задачу піднесення до степеня за модулем .