💻 현생/⛓ 알고리즘
[백준] 2004번 : 조합 0의 개수
영이오
2021. 3. 24. 20:22
문제
풀이
myunji.tistory.com/231?category=1154147
[백준] 1676번 : 팩토리얼 0의 개수
문제 풀이 저 문제 기준으로 10은 1이다. 100은 2고, 1000은 3이다. 즉 해당 팩토리얼을 계산했을 때 10이 몇번이나 곱해졌는지 세어보면 답이 나올 것이다. 10=2x5다. 그니까 팩토리얼을 계산했을 때
myunji.tistory.com
이 문제의 풀이를 거의 그대로 사용할 것이다.
nCm = n!/(m!(n-m)!)이다.
그니까 n!과 m!, 그리고 (n-m)!의 2와 5의 수를 각각 구한 뒤, 나눗셈 곱셈을 잘 고려해 계산하면 되겠다.
소스코드
#include <iostream>
#include <algorithm>
using namespace std;
pair<long long, long long> binomial(long long n) {
int two_cnt = 0, five_cnt = 0;
for (long long i = 2; i <= n; i *= 2)
two_cnt += n / i;
for (long long i = 5; i <= n; i *= 5)
five_cnt += n / i;
return pair<long long, long long>(two_cnt, five_cnt);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n, m;
cin >> n >> m;
pair<long long, long long>p1 = binomial(n); //n!
pair<long long, long long>p2 = binomial(m); //m!
pair<long long, long long>p3 = binomial(n - m); //(n-m)!
long long two = p1.first - p2.first - p3.first;
long long five = p1.second - p2.second - p3.second;
cout << min(two, five);
}