이런 식으로 음의 지수를 양의 지수로 바꿀 수 있습니다. 이를 그대로 코드로 옮기면 다음과 같
습니다.
class FieldElement:
...
def__pow__(self, exponent):
n = exponent
while n <0:
n +=self.prime -1
➊
num =pow(self.num, n,self.prime)
➋
returnself.__class__(num,self.prime)
➊ 양의 지수를 얻을 때까지
self
.
prim
-
1
값을 계속 더합니다.
➋ 계산 효율이 좋은 내장함수
pow
()
를 사용해서 계산합니다.
그런데
__
pow
__
를 계산하는 더 좋은 방법이 있습니다. 식
a
%
p
에서와 같이 나머지 연산자(
%
)
를 사용하면 음수인
a
값도
0
과
p
-
1
사이의 값으로 반환됩니다. 따라서 음의 거듭제곱에 대해
서
self
.
prim
-
1
을 계속 더하지 않고
%
연산자를 적용하면
while
루프 없이 코딩할 수 있습
니다. 이런 식으로 구현된
pow
()
함수는 아주 큰 음의 지수를 가진 거듭제곱을 빠르게 실행합
니다.
class FieldElement:
...
def__pow__(self, exponent):
n = exponent %(self.prime -1)
➊
num =pow
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.