Attachment 'binpow1.py'

Download

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 Написать программу, реализующую бинарное возведение в степень для любой заданной функции (например, для возведения в степень и для умножения строки на число путём сложения строк, при этом умножение чисел и сложение строк оформляются как функции)
   5 
   6 a**2n=a**n*a**n; a**(2n+1)=a**n*a**n*a
   7 '''
   8 
   9 def binpow(a,N,fun):
  10     'Вычисляет N-кратное fun(fun(...fun(fun(a,a),a)..,a),a)'
  11     res=None
  12     while N:
  13         if N%2:
  14             if res is None:
  15                 res = a
  16             else:
  17                 res = fun(res,a)
  18         a=fun(a,a)
  19         N/=2
  20     return res
  21 
  22 if __name__ == "__main__":
  23     print binpow(2,13,int.__mul__)
  24     print binpow("qWe",13,str.__add__)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.