«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

Code Run

곱셈에 대한 역원에 관하여 본문

코딩 tip

곱셈에 대한 역원에 관하여

comkiwer 2016. 10. 19. 18:16


P가 소수일때 x의 곱셈에 대한 역원을 페르마의 소정리를 이용하여 구할 수 있다.


x^(P-1) = 1 (mod P) 이므로

x^(P-2) = x^(-1) (mod P) 를 얻는다.



x^(P-2)는 분할 정복을 이용하여 O(log(P))에 구할 수 있다.




* P가 소수일때 1 ~ N까지 수들의 P의 곱셈에 대한 역원(inverse)을 O(N)에 구하는 방법


cf) https://apps.topcoder.com/forums/?module=Thread&threadID=680416&start=15&mc=26 



P : modulo(ex. p = 1000000007)

inv(1) = 1

inv(x) = -(P/x) * inv(P%x) for x>1



[증명]

P % x = P - P/x*x  (mod P)

(P%x) = -P/x*x


양변을  x * (P%x) 로 나누면 아래와 같은 결과를 얻는다.


inv(x) = -P/x * inv(P%x) = ((P - P/x) * inv(P%x)) % P