PS/Baekjoon Online Judge

[백준 13977] 이항 계수와 쿼리 [C]

kimyoungrok 2021. 8. 28. 04:08

백준 - 13977


풀이

"백준 11401, 이항 계수 3"의 확장 문제이다.

M개의 N과 K에 대해 이항 계수를 계산해야 하므로, 미리 4e6까지의 factorial과 역원을 구해주면 된다.


소스코드

#include <stdio.h>
#define ll long long
#define MAX 4000001
const int MOD = 1e9+7;
int A[MAX] = {1}, B[MAX];

int pow(ll a, int b){
    ll result = 1;
    while (b){
        if (b & 1) result = result*a %MOD;
        b >>= 1;
        a = a*a %MOD;
    }
    return result;
}
int main(){
    for (ll i = 1; i < MAX; i++)
        A[i] = A[i-1]*i %MOD;
    B[MAX-1] = pow(A[MAX-1], MOD-2);
    for (ll i = MAX-2; i >= 0; i--)
        B[i] = B[i+1]*(i+1) %MOD;
		
    int M;
    scanf("%d", &M);
    while (M--){
        int N, K;
        scanf("%d %d", &N, &K);
        printf("%d\n", ((ll)A[N]*B[K] %MOD) *B[N-K] %MOD);
    }
}

출처 및 참고자료

 

13977번: 이항 계수와 쿼리

\(M\)개의 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

[백준 11401] 이항 계수 3 [C]

풀이 A = N! - (N-K)!와 B = K!를 MOD로 나누며 구하고, 페르마의 소정리를 이용해 ( A* B^(MOD-2) )%MOD를 구하면 된다. 소스코드 #include const int MOD = 1e9+7; int main(){ long long N, K, A = 1, B = 1;..

kyr-db.tistory.com

 

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 11402] 이항 계수 4 [C]  (0) 2021.08.28
[백준 15791] 세진이의 미팅 [C]  (0) 2021.08.28
[백준 16134] 조합 (Combination)[C]  (0) 2021.08.28
[백준 11401] 이항 계수 3 [C]  (0) 2021.08.28
[백준 2981] 검문 [C]  (0) 2021.08.28