백준 단계별 21 분할 정복
11401 이항계수 3 - 페르마의 소정리 쉣...
페르마 그는 신인가? 풀이는 아래와 같다.
이항계수 nCk=n!(n−K)!⋅k!=n⋅(n−1)⋯(n−k+1)k⋅(k−1)⋯1이다.
편의를 위해 A=n⋅(n−1)⋯(n−k+1),B=k⋅(k−1)⋯1라고 두자.
한편, 페르마의 소정리에 의해 나누는 값 1,000,000,007(p라고 두자)은 소수이므로 ap−1≡1%p이다.
그러면 이항계수를 AB%p=(AB−1)%p=(AB−1×1)%p로 둘 수 있는데,
(AB−1×Bp−1)%p=(AB−1%p×Bp−1%p)%p=((AB−1%p)×1)%p=(AB−1)%p이다.
따라서 이항계수 (AB−1×1)%p가(AB−1×Bp−1)%p=(ABp−2)%p로 바뀌게 된다.
최종적으로 (ABp−2)%p=((n⋅(n−1)⋯(n−k+1))×(k!)p−2)%p가 되고, 이는 O(log(p) + n)이 된다.
6549 Largest Rectangle in a Histogram
이분탐색 풀까
코포는 주말에
'PS > PS Log' 카테고리의 다른 글
22.08.04. 풀었던 문제들 (0) | 2022.08.04 |
---|---|
22.08.03. 풀었던 문제들 (0) | 2022.08.03 |
22.07.13. 풀었던 문제들 (0) | 2022.07.13 |
22.07.12. 풀었던 문제들 (0) | 2022.07.12 |
22.07.11. 풀었던 문제들 (0) | 2022.07.11 |