-
[BOJ 13977, Python 3] 이항 계수와 쿼리알고리즘/BOJ 2021. 9. 14. 14:02반응형
https://www.acmicpc.net/problem/13977
참조
다양한 방법의 이항계수 알고리즘 : https://koosaga.com/63
페르마의 소정리 증명 : https://youtu.be/uhXOkoXtULI
$O(nlogp)$가 걸리는 이항계수 알고리즘 : https://velog.io/@gidskql6671/%EC%9D%B4%ED%95%AD-%EA%B3%84%EC%88%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#%ED%8E%98%EB%A5%B4%EB%A7%88%EC%9D%98-%EC%86%8C%EC%A0%95%EB%A6%AC
풀이
페르마의 소정리와 빠른 거듭제곱 알고리즘을 사용하여 $O(nlogp))$ 시간이 걸리는 이항계수 알고리즘을 사용하면 됩니다.
주의할 점은 팩토리얼 값을 미리 계산해둬야 시간 초과를 피할 수 있습니다.
코드
12345678910111213141516171819202122input = __import__('sys').stdin.readlineMOD = int(1e9 + 7)N = 4 * int(1e6) + 1factorial = [1] * Nfor i in range(1, N):factorial[i] = (factorial[i-1] * i) % MODfor _ in range(int(input())):n, k = map(int, input().split())A = factorial[n]B = (factorial[k] * factorial[n - k]) % MODB2 = 1expo = MOD - 2while expo:if expo % 2: B2 = (B * B2) % MODB = (B * B) % MODexpo //= 2res = (A * B2) % MODprint(res)cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 16282, Python 3] Black Chain (0) 2021.09.16 [BOJ 6549, Python 3] 히스토그램에서 가장 큰 정사각형 (0) 2021.09.15 [BOJ 1019, Python 3] 책 페이지 (0) 2021.09.13 [BOJ 20047, C++] 동전 옮기기 (0) 2021.09.10 [BOJ 20041, Python 3] Escaping (0) 2021.09.09