728x90
▶11401 - 이항 계수 3
▶문제
자연수 n과 정수 k가 주어졌을 때 이항 계수 nCk를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
▶입력
첫째 줄에 n과 k가 주어진다. (1 ≤ n ≤ 4,000,000, 0 ≤ k ≤ n)
▶출력
nCk를 1,000,000,007로 나눈 나머지를 출력한다.
▶풀이
#페르마의 소정리
#(a/b)%p
# = (a * b^-1) % p
# = (a * b^-1 * b^(p-1)) % p
# = (a * b^(p-2)) % p
# = (a % p) * (b^(p-2) % p) % p
def pow(a,b):
if b == 0:
return 1
if b % 2 == 1:
return (pow(a, b//2)**2*a)%p
else:
return (pow(a, b//2)**2)%p
n, k = map(int, input().split())
p = 1000000007
factorial = [1 for i in range(n+1)]
for i in range(2, n+1):
factorial[i] = factorial[i-1]*i % p
A = factorial[n]
B = (factorial[n-k]*factorial[k])%p
print((A%p) * (pow(B, p-2) % p) %p)
728x90
'BOJ Code > Gold' 카테고리의 다른 글
[백준/BOJ] gold4 - 2580번 스도쿠 (Python) (0) | 2022.06.05 |
---|---|
[백준/BOJ] gold4 - 7662번 이중 우선순위 큐 (Python) (0) | 2022.06.03 |
[백준/BOJ] gold2 - 1202번 보석 도둑 (Python) (0) | 2022.04.07 |
[백준/BOJ] gold1 - 1194번 달이 차오른다, 가자. (Python) (2) | 2022.04.03 |
[백준/BOJ] gold4 - 4485번 녹색 옷 입은 애가 젤다지? (Python) (1) | 2022.04.03 |