Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 윤곽선검출
- 이것이자바다
- 웹개발기초
- 스파르타코딩클럽
- 백준괄호
- java
- 백준평범한배낭
- 딥러닝
- 확인문제
- 냅색알고리즘
- 가운데를말해요
- 카카오코테
- 합성곱연산
- 코드트리
- BOJ1655
- 백준9012
- 코테
- 백준스택
- KT포트포워딩
- 2019카카오코테
- BOJ
- 컴퓨터비전
- 백준
- 백준10828
- 이것이자바다확인문제
- 이것이자바다9장
- 운영체제
- 코딩테스트실력진단
- 백준온라인저지
- 백준가운데를말해요
Archives
- Today
- Total
코딩하는 락커
[BOJ 11401] 이항 계수 3 - Python 풀이 본문
문제
입력
출력
코드
import sys
P = 1000000007
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
def solve(N, K):
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 )
if __name__ == "__main__":
N, K = map(int, sys.stdin.readline().split())
solve(N,K)
결과
간단한 문제이나 N의 크기가 40,000,000이나 되는게 함정인 문제였다.
n!/(n-k)k! 을 이용해서 풀려고 했으나, 1,000,000,007로 나눠야 하므로 분자와 분모에 나머지를 구해서 계산하게 되면 0으로 나누는 문제가 발생할 수 있기 때문에 분수꼴을 곱셈꼴로 바꿔야 한다.
(https://rhdtka21.tistory.com/123 <- 링크 참조)
따라서 페르마의 소정리를 이용해야 한다
페르마의 소정리는 p가 소수이고 a가 p의 배수가 아니면
'💯 코딩테스트 > [2021~] 💯 코딩테스트' 카테고리의 다른 글
[BOJ 2749] 피보나치 수3 - Python 풀이 (0) | 2022.03.02 |
---|---|
[BOJ 10830] 행렬 제곱 - Python 풀이 (0) | 2022.02.08 |
[BOJ 1655] 가운데를 말해요 - JAVA 풀이 (0) | 2022.01.09 |
[BOJ 12865] 평범한 배낭 - JAVA 풀이 (0) | 2022.01.09 |
[BOJ 9012] 괄호 - JAVA 풀이 (0) | 2022.01.03 |
Comments