티스토리 뷰

Algorithm/BaekJoon

[BOJ] 11401. 이항 계수 3

cherishee 2020. 3. 1. 09:35

문제

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

입력

첫째 줄에 N K가 주어진다. (1 ≤ N ≤ 4,000,000, 0 ≤ K  N)

출력

 (NK)를 1,000,000,007로 나눈 나머지를 출력한다.

예제 입력 

5 2

예제 출력 

10


풀이

 

코드

import java.util.Scanner;

public class B11401 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        long p = 1000000007;

        long[] fac = new long[n+ 1];
        fac[0] = 1;
        fac[1] = 1;
        //fac data 구하기
        for (int i = 2; i <=n; i++) {
            fac[i] = (fac[i - 1] * i) % p;
        }

        //분모 구하기
        long denominator = (fac[k] * fac[n-k]) % p;

        // denominatorK(분모의 K-2 제곱 구하기)
        long idx = p - 2;
        long denominatorK = 1;
        while (idx > 0) {
            //홀수이면
            if (idx % 2 == 1) {
                denominatorK *= denominator;
                denominatorK %= p;
            }
            denominator = (denominator * denominator) % p;
            idx /= 2;
        }
        long result = ((fac[n] % p) * (denominatorK % p)) % p;
        System.out.print(result);

    }
}

문제 출처 : https://www.acmicpc.net/problem/11401

'Algorithm > BaekJoon' 카테고리의 다른 글

[BOJ] 10799.쇠막대기  (0) 2020.08.12
[BOJ] 1181. 단어정렬  (0) 2020.08.06
[BOJ] K번째 수  (0) 2020.03.08
[BOJ] 10830. 행렬 제곱  (0) 2020.03.01
[BOJ]1629. 곱셈  (0) 2020.02.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함