-
[BOJ 13977, Python 3] 이항 계수와 쿼리알고리즘/BOJ 2021. 9. 14. 14:02반응형
https://www.acmicpc.net/problem/13977
13977번: 이항 계수와 쿼리
개의 자연수 과 정수 가 주어졌을 때 이항 계수 를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.www.acmicpc.net
참조
다양한 방법의 이항계수 알고리즘 : https://koosaga.com/63
이항계수 (nCr) mod p 계산하기
nCr = n! / (n-r)! * r! 일 때, nCr mod prime을 빠르게 계산하는 방법에 대해서 얘기하려 한다. nCr 한 쿼리는 O(1)에 처리되어야 한다고 가정한다. (즉 전처리 한번 한 이후 nCr을 하나 계산하는데 O(1)) 1. O(n..
koosaga.com
페르마의 소정리 증명 : https://youtu.be/uhXOkoXtULI
이항 계수 알고리즘 - Dynamic Programming, 페르마의 소정리
이항 계수 알고리즘을 구현하자. Dynamic Programming을 통한 구현과 페르마의 소정리를 이용한 구현...
velog.io
풀이
페르마의 소정리와 빠른 거듭제곱 알고리즘을 사용하여
시간이 걸리는 이항계수 알고리즘을 사용하면 됩니다.주의할 점은 팩토리얼 값을 미리 계산해둬야 시간 초과를 피할 수 있습니다.
코드
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