728x90
반응형
이항 계수가 뭔지 기억이 안 나서 이것부터 찾아봤다.
페르마의 소정리 라는 공식을 사용하면 코딩에 용이한 식으로 바꾸는 것이 가능하다.
또한 함수로 팩토리얼 계산을 미리 해놓으면 시간 복잡도를 O(N+logN) 정도로 개선 가능하다/
import sys
read = sys.stdin.readline
def power(a, b):
if b == 0:
return 1
if b % 2: #홀수이면
return (power(a, b//2) ** 2 * a) % p
else:
return (power(a, b//2) ** 2) % p
p = 1000000007
N, K = map(int, read().split())
fact = [1 for _ in range(N+1)]
for i in range(2, N+1):
fact[i] = fact[i-1] * i % p
A = fact[N]
B = (fact[N-K] * fact[K]) % p
print((A % p) * (power(B, p-2) % p) % p )
728x90
반응형
'Algorithm & Data Structure' 카테고리의 다른 글
백준 - 10816번(이진탐색) (0) | 2022.02.06 |
---|---|
백준 - 1920번(이진탐색) (0) | 2022.02.06 |
백준 - 10830(재귀, 분할정복) (0) | 2022.02.04 |
백준 - 1629번(분할정복, 분할곱) (0) | 2022.02.03 |
백준 - 1992번(재귀,분할정복,쿼드트리) (0) | 2022.02.03 |