본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 11401. 이항 계수 3

by 뭉망뭉 2023. 8. 17.

백준 문제 링크: https://www.acmicpc.net/problem/11401

문제 요약

이항 계수를 1,000,000,007로 나눈 나머지

핵심 아이디어

팩토리얼의 경우 바텀업으로 for문을 돌려서 팩토리얼문을 구해두고, 페르마의 소정리를 이용해서 구해주면 된다.

풀이

# gold1-11401. 이항 계수 3

import sys
input = sys.stdin.readline

large = 1000000007
n, k = map(int, input().split())
factorial = [1 for _ in range(n+1)]

def square(a):
    a = a % large
    a = a * a
    return a % large

def binary_power(n, k):
    if k == 1:
        return n % large
    if k % 2 == 0:
        b = binary_power(n, k//2)
        return square(b)
    else: 
        b = binary_power(n, k//2)
        return (square(b) * (n % large)) % large

for i in range(2, n+1):
    factorial[i] = factorial[i-1] * i % large

# nCk 
# aCb
a = factorial[n]
b = (factorial[n-k] * factorial[k]) % large

# 페르마의 소정리 이용
# (A/B) % m     
# = A * B**(-1) % m 
# = A * B**(-1) * B**(m-1) % m 
# = A * B**(m-2) % m 
# = (A % m) * (B**(m-2) % m) % m 
print((a % large) * (binary_power(b, large-2) % large) % large)

실행 시간

메모리 191116KB, 시간 1152ms (python3)

'ALGORITHM > 백준' 카테고리의 다른 글

[BOJ/PYTHON] 14565. 역원(Inverse) 구하기  (0) 2023.08.17
[BOJ/PYTHON] 11689. GCD(n, k) = 1  (0) 2023.08.17
[BOJ/PYTHON] 4375. 1  (0) 2023.08.17
[BOJ/PYTHON] 1074. Z  (0) 2023.08.17
[BOJ/PYTHON] 2438. 별 찍기 - 1  (0) 2023.08.17

댓글