문제링크: www.acmicpc.net/problem/11401
예전에 들어본 적 있어서 페르마의 소정리로 풀어야 한다는 것은 기억했지만
정리가 기억나지 않았다.
적어두고 반복해봐야겠다.
import java.io.*;
import java.util.*;
public class Main {
public static final long MOD = 1000000007;
public static long fac[];
public static long power(long num,long cnt) {
if(cnt==0 || num==0) return 1;
long temp = power(num,cnt/2);
temp = temp*temp % MOD;
if(cnt%2==1) {
temp*=num % MOD;
}
return temp % MOD;
}
public static void init(int N) {
fac[0] = 1;
fac[1] = 1;
fac[2] = 2;
for(int i=3;i<=N;i++) {
long x = i;
fac[i] = (fac[i-1] * x)%MOD;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N,K;
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
fac = new long[N+3];
init(N);
long B = (fac[K]*fac[N-K])%MOD;
System.out.println((fac[N]*power(B,MOD-2)%MOD));
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10830 행렬 제곱 (0) | 2020.12.20 |
---|---|
[백준] 2740 행렬 곱셈 (0) | 2020.12.20 |
[백준] 1629 곱셈 (2) | 2020.12.20 |
[백준] 1992 쿼드트리 (0) | 2020.12.20 |
[백준] 1541 잃어버린 괄호 (0) | 2020.12.20 |