Олимпиадный тренинг

Задача . Умножение с аккумулированием_0


Задача

Темы: Информатика
Закончилось лето и дядя Фёдор уехал из деревни Простоквашино, забрав с собой ноутбук. Теперь Матроскин вынужден вести бухгалтерию на счётах.
Складывать числа Матроскин умел, а вычислять произведение не умел. Все вечера Матроскин проводил за счётами.
Шарик решил помочь Матроскину и принес старинный учебник арифметики. В учебнике они нашли описание "египетского" спосба умножения.
В книге не было словесного описания, но была таблица для умножения двух чисел.
Напишите программу, которая воспроизводит этот метод.  
Операция умножения это замена многократного сложения.
Пусть определена операция сложения на объектами типа A. 
Необходимо выполниеть операцию\(A\cdot n =\) \(\underbrace {A+...+A}_{n\ раз}\) , то есть организовать умножение объёкта типа A на натуральное число n
Ваша программа должна быть достаточно эффективной и выполнять не более, чем \(2\cdot log_2(n) \) операций сложений.
Дан объект A /представлен как строка/  и натуральное число n.  Напишите фрагмент кода, эффективно выполняющий операцию \(A\cdot n\) 
В шаблоне представлен фрагмент кода, выполняющий операцию \(A\cdot n\) за n  операций сложения
def multi( A, n ): # умножение объекта A на натуральное число n
   rez=None 
   for i in range(n):
      rez=my_add(rez,A) # my_add(x,y)  - выполняет сложение объектов x+y (если один есть None, то возвращает значение другого) 
  return rez         

Напишите программу "быстрого" умножения. Запрещено использовать операцию * (умножение).
Программа 

time 500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя