๋ฐ์ํ
๋ฌธ์
$n \choose m$์ ๋์๋ฆฌ $0$์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, โ 0$n \ne 0$)์ด ๋ค์ด์จ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ $n \choose m$์ ๋์๋ฆฌ $0$์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 128 MB | 50057 | 14119 | 11624 | 28.691% |
https://www.acmicpc.net/problem/2004
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ๋ฆ
ํฉํ ๋ฆฌ์ผ0์ ๊ฐ์ ๋ฌธ์ ์ฒ๋ผ 2์ 5์ ์น์๊ฐ ๊ฒน์น๋ ์๋ฅผ ๊ตฌํ๋ค. ์๋ฅผ ๋ค์ด 25C12
์กฐํฉ์ ๊ฒฝ์ฐ
25! / 13! * 12!
์ผ๋ก ํํ๋ ๊ฒ์ด๋ค. ์ฆ n! / (n-m)! * m!
์ด๊ณ n!
, (n-m)!
, m!
์์ 2์ 5์ ์น์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
a1 : 2์ ์น์ , b : 5์ ์น์
n! = {2,5}(a1,b1) ,(n-m)! = {2,5}(a2,b2) , m! = {2,5}(a3,b3)
๊ฒฐ๊ณผ์ ์ผ๋ก,
2์ ์น์๋ (a1 - a2 - a3)
, 5์์น์๋ (b1-b2-b3)
์ด๋ฅผ ๋ฐํ์ผ๋ก 2์ 5์ ์น์์ค ์ต์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ์กฐํฉ0์๊ฐ์ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] split = br.readLine().split(" ");
long n = Long.parseLong(split[0]);
long m = Long.parseLong(split[1]);
long count5 = count5(n) - count5(n-m) - count5(m);
long count2 = count2(n) - count2(n-m) - count2(m);
System.out.println(Math.min(count5,count2));
br.close();
}
public static int count5(long num){
int count = 0;
while (num >=5){
count = (int) (count + (num/5));
num = num/5;
}
return count;
}
public static int count2(long num){
int count = 0;
while (num >=2){
count = (int) (count + (num/2));
num = num/2;
}
return count;
}
}
๋ฐ์ํ