원본 : www.acmicpc.net/problem/2004
2004번: 조합 0의 개수
첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다.
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws Exception {
String str = reader.readLine();
long n = Long.parseLong(str.split(" ")[0]);
long m = Long.parseLong(str.split(" ")[1]);
long nFac[] = new long[2];
long mFac[] = new long[2];
long nMinusMFac[] = new long[2];
nFac = cntTwoFive(n);
mFac = cntTwoFive(m);
nMinusMFac = cntTwoFive(n - m);
long resultCntTwo = nFac[0] - mFac[0] - nMinusMFac[0];
long resultCntFive = nFac[1] - mFac[1] - nMinusMFac[1];
if (resultCntTwo <= resultCntFive) {
writer.write(resultCntTwo + "");
} else {
writer.write(resultCntFive + "");
}
writer.flush();
}
public static long[] cntTwoFive(long n) {
long cntTwo = 0;
long cntFive = 0;
long two = 2;
long five = 5;
while (true) {
if (two > n) {
break;
} else {
cntTwo += n / two;
two *= 2;
}
}
while (true) {
if (five > n) {
break;
} else {
cntFive += n / five;
five *= 5;
}
}
long result[] = new long[2];
result[0] = cntTwo;
result[1] = cntFive;
return result;
}
}
댓글 영역