@@ -117,45 +117,55 @@ const modInverse = (a, m) => {
117117
118118## Example
119119
120- - <a href =" https://www.acmicpc.net/problem/16134 " target =" _blank " >16134번: 조합 (Combination) </a >
120+ - <a href =" https://www.acmicpc.net/problem/3955 " target =" _blank " >3955번: 캔디 분배 </a >
121121
122- ``` kotlin
123- import java.io.*
122+ ``` javascript
123+ const path = process .platform === " linux" ? " /dev/stdin" : " input.txt" ;
124+ const input = require (" fs" ).readFileSync (path).toString ().split (" \n " );
125+
126+ const t = Number (input[0 ]); // 테스트 케이스의 개수, 0 < t < 100
127+ let answer = " " ;
128+
129+ const extendedGCD = (a , b ) => {
130+ if (b === 0 ) {
131+ return { gcd: a, x: 1 , y: 0 };
132+ } else {
133+ const { gcd , x: x1 , y: y1 } = extendedGCD (b, a % b);
134+
135+ const x = y1;
136+ const y = x1 - Math .floor (a / b) * y1;
124137
125- const val p = 1000000007
138+ return { gcd, x, y };
139+ }
140+ };
141+
142+ const modInverse = (a , m ) => {
143+ const { gcd , x } = extendedGCD (a, m);
126144
127- fun main () {
128- val br = BufferedReader (InputStreamReader (System .`in `))
129- val bw = BufferedWriter (OutputStreamWriter (System .out ))
145+ if (gcd !== 1 ) {
146+ return " IMPOSSIBLE\n " ;
147+ }
148+
149+ let result = ((x % m) + m) % m;
130150
131- // 0 <= r <= n <= 1,000,000
132- val (n, r) = br.readLine().split( " " ).map { it.toInt() }
133- br.close()
151+ while (a * result <= m) {
152+ result += m;
153+ }
134154
135- val factorial = LongArray (n + 1 ) { 0 }
136- factorial[0 ] = 1L
137- factorial[1 ] = 1L
138- for (i in 2 .. n) {
139- factorial[i] = (i * factorial[i - 1 ]) % p
140- }
155+ return ` ${ result > 1_000_000_000 ? " IMPOSSIBLE" : result} \n ` ;
156+ };
141157
142- val result = factorial[n] * expdiv(factorial[r] * factorial[n - r] % p, p - 2 ) % p
158+ for (let i = 1 ; i <= t; i++ ) {
159+ // K: 참가자 수
160+ // C: 한 봉지에 들어있는 사탕의 개수
161+ // 1 <= K, C <= 1_000_000_000
162+ const [K , C ] = input[i].split (" " ).map (Number );
143163
144- bw.write(" $result " )
145- bw.flush()
146- bw.close()
164+ // (C * x) mod K = 1
165+ answer += modInverse (C , K );
147166 }
148167
149- fun expdiv (n : Long , e : Int ): Long {
150- return when (e) {
151- 0 -> 1
152- 1 -> n
153- else -> {
154- val temp = expdiv(n, e / 2 )
155- if (e % 2 == 0 ) (temp * temp) % p else (((n * temp) % p) * temp) % p
156- }
157- }
158- }
168+ console .log (answer .trim ());
159169 ```
160170
161171- <a href =" https://www.acmicpc.net/problem/14565 " target =" _blank " >14565번: 역원(Inverse) 구하기</a >
0 commit comments