반응형
https://www.acmicpc.net/problem/11401
페르마의 소정리와 확장 유클리드 알고리즘으로 값구하기.
확장 유클리드알고리즘은 Ax + By = GCD(A,B) 라고할때 맞는 정수 x y를 구하는 방법이다.
재귀 적인 방법이 있고 반복문을 통한 반복이 있는 반복문을 통한방법이 이해하기 쉬우므로 사용하였다.
아래는 재귀적으로 푸신분의 소스참조.. 이해할려고해도 이해잘안됨
https://onsil-thegreenhouse.github.io/programming/problem/2018/04/02/problem_combination/
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package day0301;
public class B11401 {
static long p = 1000000007L;
static long Uclede(long a, long b) {
// Ax + By = 1 만족하는거 찾기
long s[] = new long[2];
long t[] = new long[2];
s[0] = 1; t[0] =0;
s[1] = 0; t[1] = 1;
while(a %b != 0) {
long ss = s[0] - (a/b)*s[1];
long tt = t[0] - (a/b)*t[1];
s[0] = s[1];
t[0] = t[1];
s[1] = ss;
t[1] = tt;
long tmp = b;
b = a%b;
a = tmp;
}
return t[1] = t[1] < 0 ? t[1] +p : t[1];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
long factor[] = new long[N+1];
factor[1] = 1;
for(int n=2;n<=N;n++) {
factor[n] = (n * factor[n-1]) % p;
}
//result = N! * x % p --> x : (N-K)!K! x + P y = 1 만족하는 x
if(N==1 || K==0||K==N) {
System.out.println(1);
}else {
long x = Uclede(p, (factor[N-K] * factor[K])%p);
long result = (factor[N]*x)%p;
System.out.println(result);
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'ProgramSoliving' 카테고리의 다른 글
백준 : 2933 JAVA (0) | 2020.03.03 |
---|---|
백준 : 10830 (0) | 2020.03.02 |
백준 : 3197 (0) | 2020.03.01 |
Sqrt Decomposition (0) | 2020.03.01 |
백준 : 1655 (0) | 2020.03.01 |