본문 바로가기

프로그래밍/Python

pow mod

반응형

상당히 빠른 pow 계산 알고리즘. 승수를 2진수로 바꾸어 계산.

   n     b1b2b3b4     b1b2b3 0   b4      b1b2b3   b4
 x   = x          = x          x    = xx        x    = ...
 
                           10                   1
   5    101    100   1    2    1     10   1    2   1
 3   = 3    = 3    3   = 3    3   = 9   3   = 9   3  = 81 x 3
 

code

def pow(x, y):
  r = 1
  while y != 0:
    if y & 1:
      r *= x
    y = y >> 1
    x = x**2
  return r

그래서 powmod 는 다음과 같이

def powmod(x, y, n):
  r = 1
  while y != 0:
    if y & 1:
      r *= x
      r %= n
    y = y >> 1
    x = x**2
    x %= n
  return r

 

 
728x90