728x90
풀이
MOD가 소수이기 때문에, A = N! - (N-K)!와 B = K!를 MOD로 나누며 구하고,
Fermat’s little theorem를 이용해 ( A* B^(MOD-2) )%MOD를 구하면 된다.
소스코드
#include <stdio.h>
const int MOD = 1e9+7;
int main(){
long long N, K, A = 1, B = 1;
scanf("%d %d", &N, &K);
for (int i = N; i > N-K; i--)
A = A*i %MOD;
for (int i = K; i >= 2; i--)
B = B*i %MOD;
N = 1, K = MOD-2;
while (K){
if (K & 1) N = N*B %MOD;
K >>= 1;
B = B*B %MOD;
}
printf("%d", A*N %MOD);
}
출처 및 참고자료
11401번: 이항 계수 3
자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
www.acmicpc.net
[백준 13172] Σ [C]
풀이 지문이 어마무시하게 길면서 페르마의 소정리에 대해 설명이 빼곡한 친절한 문제이다. 요점은 다음과 같다. M개의 N과 S에 대해 S*N^(MOD-2)의 합들을 MOD로 나눈 나머지를 구하면 된다. 단, N^(MO
kyr-db.tistory.com
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 13977] 이항 계수와 쿼리 [C] (0) | 2021.08.28 |
---|---|
[백준 16134] 조합 (Combination)[C] (0) | 2021.08.28 |
[백준 2981] 검문 [C] (0) | 2021.08.28 |
[백준 2023] 신기한 소수 [C] (0) | 2021.08.27 |
[백준 9020] 골드바흐의 추측 [C] (0) | 2021.08.27 |