장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[C++] BOJ 2004 조합 0의 개수
알고리즘/백준

[C++] BOJ 2004 조합 0의 개수

2022. 1. 24. 18:48
반응형

 

 

문제 출처

백준 온라인 저지

https://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

 

문제 

 

입 / 출력

 

풀이

조합의 공식이 n! / m! (n-m)! 이기 때문에

분자와 분모를 소인수 분해 했을 경우 

  • 분자가 가진 5의 개수 - 분모가 가진 5의 개수
  • 분자가 가진 2의 개수 - 분모가 가진 2의 개수

중에서 더 작은 값을 구하면 답을 구할 수 있다.

 

코드

#include <iostream>

using namespace std;

long long n, m;

long long div5(long long n) {
  long long cnt = 0;
  for (long long i = 5; i <= n; i *= 5)
    cnt += n / i;

  return cnt;
}

long long div2(long long n) {
  long long cnt = 0;
  for (long long i = 2; i <= n; i *= 2)
    cnt += n / i;

  return cnt;
}

int main() {
  cin >> n >> m;
  long long five = div5(n) - div5(n - m) - div5(m);
  long long two = div2(n) - div2(n - m) - div2(m);
  cout << min(five, two) << "\n";
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[C++] BOJ 2331 반복수열  (0) 2022.01.24
[C++] BOJ 10451 순열사이클  (0) 2022.01.24
[C++] BOJ 11653 소인수분해  (0) 2022.01.24
[C++] BOJ 6588 골드바흐의 추측  (0) 2022.01.24
[C++] BOJ 1978 소수 찾기  (0) 2022.01.18
    '알고리즘/백준' 카테고리의 다른 글
    • [C++] BOJ 2331 반복수열
    • [C++] BOJ 10451 순열사이클
    • [C++] BOJ 11653 소인수분해
    • [C++] BOJ 6588 골드바흐의 추측
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바