
https://www.acmicpc.net/problem/11401
이항 계수 (N, K) = N! / K!(N-K)! 으로 구할 수 있다.
이를 1,000,000,007로 나눈 값을 구하는 문제이다.
나눗셈에서의 모듈러 연산: 페르마의 소정리
A / B % P = A * B^(P-2) % P (단, P는 소수여야 함)
import sys
input = sys.stdin.readline
MOD = 10**9 + 7 # 문제에서 주어진 소수
# 거듭제곱을 빠르게 계산하는 함수 (a^b % MOD)
def power(a, b):
result = 1
while b > 0:
if b % 2 == 1:
result = (result * a) % MOD
a = (a * a) % MOD
b //= 2
return result
# 입력
N, K = map(int, input().split())
# 1부터 N까지의 팩토리얼을 미리 계산
factorial = [1] * (N + 1)
for i in range(1, N + 1):
factorial[i] = (factorial[i - 1] * i) % MOD
# 분자: N!
numerator = factorial[N]
# 분모: K! * (N-K)!
denominator = (factorial[K] * factorial[N - K]) % MOD
# 페르마의 소정리를 이용해 분모의 역원 구하기
inv_denominator = power(denominator, MOD - 2)
# 최종 결과
print((numerator * inv_denominator) % MOD)