白駿2004/組合せ0の個数
質問する
に答える
説明:
0個の数を組み合わせる問題を解くにはまず工場0個の数を理解しなければならない.
工場0の数量
上のリンクの問題を見るとわかりますが、肝心なのは工場値の2と5の乗数が重なる数を求めることです.
工場の中で0個の数の問題を探して、2より小さい5個の数を探し出すだけでいいです.
しかし、組み合わせで求める方法は少し違います.
まず,組合せ,すなわち二項係数の式を考慮する.この項係数の式は以下の通りである.
ここで0の個数は2と5のオーバーラップ乗数、すなわちn!に等しい.(n-m)!, m!要求された2と5の勝数.
より簡単に言えば、で2の乗数(a 1−b 1,c 1)と5の乗数(a 2−b 2−c 2)を求めれば、今では重なる(ペア可能な)個数を求めることができるので、2と5の乗数のうち最大値を出力することができる.
コード#コード#
import java.util.Scanner;
public class Num2004 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextInt();
long m = sc.nextInt();
// 각각 몇 제곱인지 구해준다.
long count5 = five(n) - five(n - m) - five(m);
long count2 = two(n) - two(n-m) - two(m);
// 2와 5 중 제곱의 수가 덜나온 함수를 출력한다.
System.out.println(Math.min(count5, count2));
}
//2의 제곱 수를 구하는 함수
private static long two(long num) {
int count = 0;
while(num >= 2) {
count += (num/2);
num /= 2;
}
return count;
}
//5의 제곱 수를 구하는 함수
private static int five(long num) {
int count = 0;
while(num >= 5) {
count += (num / 5);
num /= 5;
}
return count;
}
}
注意:https://st-lab.tistory.com/166ソース:https://www.acmicpc.net/problem/2004
Reference
この問題について(白駿2004/組合せ0の個数), 我々は、より多くの情報をここで見つけました https://velog.io/@dogit/백준-2004-조합-0의-개수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol