반응형
def pow(a, n):
k = 1
a_pow_k = a
a_pow_n = 1
while n:
if k & n:
a_pow_n *= a_pow_k
n -= k
a_pow_k = a_pow_k ** 2
k *= 2
return a_pow_n
an = aklmno = ak0000 al000 am00 an0 ao
위 식에서 klmno 는 n의 2진수 표현. 즉, a2k 들의 곱만으로 an 을 쪼갤 수 있고,
a2k 는 a2k-1의 제곱이므로, 위 함수와 같이 빠르게 an 을 구할 수 있다.
위 함수는 변형하여 an의 나머지 연산 값을 구할 때 유용할 수 있겠다.
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[PYTHON3.6|PIP] in console_to_str return s.decode UnicodeDecodeError: 'utf-8' codec can't decode byte (0) | 2017.09.21 |
---|---|
[Anaconda] 설치시 오류 : 'Destination Folder' cannot contain non-ascii characters (9) | 2017.09.15 |
[Python] ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다. (0) | 2017.01.19 |
nCr 캐시된 재귀함수로 구하기 (0) | 2017.01.12 |
[PYTHON|PIP] pip 설치 에러 unable to find vcvarsall.bat (0) | 2016.07.29 |