Войти Создать аккаунт

Рекурсия · 12 из 29

Быстрое возведение в степень

Лабораторная «рекурсия», задание из криптографии: 3 в степени 10¹⁸ по модулю 10⁹ + 7. Цикл из 10¹⁸ умножений не кончится до пенсии Бориса Аркадьевича, а само число 3¹⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰ не влезет ни в какую память. Выручает половинка: aⁿ = (a^(n/2))², и на каждом шаге задача становится вдвое меньше. Циклы и pow на этой лабораторной запрещены — только рекурсия.

Что сделать

Возведите a в степень n по модулю m рекурсией через половину степени — без циклов и без pow.

Что приходит

  • a — основание, целое, не меньше нуля

  • n — показатель, целое, не меньше нуля; бывает огромным

  • m — модуль, натуральное число

Что вернуть

Остаток от деления a в степени n на m — число от 0 до m − 1.

Допишите функцию stepen в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

Ограничения

  • Без pow — и своё имя так назвать нельзя

  • Без цикла for

  • Без цикла while

Обходные пути — тоже нарушение: eval, exec, getattr, имена с двойным подчёркиванием, импорт os, subprocess и им подобных.

Вызов
stepen(3, 13, 7)
Вернуть
3
Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.