Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: На питоне есть вбудованая функция pow,и даже по модулю,тестировал с обычним возведением в степень (a**b),и на задаче c простым возведением пошёл лимит памяти,насколько ефективна функция pow,если искать возведения в степень по модулю?
1
  1  Неизвестный, 31 июля 2018 г. 14:10:38
      Объяснение очень понятное спасибо большое :)
  2  Тер-Саркисов Богдан Олегович, 30 июля 2018 г. 17:55:33
      Это разные подходы к вычислению выражения a**b mod m.
1) Если делать просто a**b%m, то выражение будет вычисляться так: сначала a**b, а потом от результата возьмется остаток от деления на m. Объем памяти для хранения числа a**b можешь сам посчитать: количество десятичных знаков равно [b*log10(a)], а количество битов для хранения такого числа равно [b*log2(a)]. По времени тоже достаточно долго будет считать на больших тестах, несмотря на хорошо реализованную целочисленную арифметику.
2) pow(a, b, m) предположительно использует быстрое возведение в степень по модулю. Оно работает за O(log(b)), а промежуточные числа, получаемые при вычислении результата, меньше m**2.
Поэтому лучше использовать pow(a, b, m), чем a**b%m.
  3  Неизвестный, 29 июля 2018 г. 16:04:56
      ну я и про ето и спрашываю,на сколько же лутче
  4  Демиденко Виталий, 29 июля 2018 г. 14:52:56
      там ещё есть pow(a,b,mod) это лучше, чем pow(a,b)%mod
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru