문제
리뷰
숫자 뒤 쪽에 0의 개수가 몇개가 되냐는건 소인수분해 했을 때 10이 몇번 곱해졌느냐에 따라 결정된다.
예를 들어, (팩토리얼 값은 아니지만) 34200 는 10이 2번 곱해진 것이다. 따라서 답은 2다. 2059000은 답이 3이다.
그런데, 10은 2x5 이다.
주어진 N을 5로 계속 나누는데, 나누어 떨어지는 개수를 세면 된다. == N! 을 소인수분해 했을때 5가 몇 승일까.
2의 개수를 안세도 되는 이유
10은 2x5니까 2의 개수도 세야 하지 않을까? 했다.
하지만, 소인수분해 했을 때 2를 인수로 가진 수의 개수 보다는, 5를 인수로 가진 수의 개수가 훨씬 적다.
7 팩토리얼을 예로 든다.
7! = 7 x 6 x 5 x 4 x 3 x 2 x 1
5의 배수는 딱 1개
2의 배수는 3개 (2,4,6)
예를 들어, 125 팩토리얼을 구한다
5 * 25 * 125 까지만 곱해봐도 5로 나누어 떨어지는 것의 개수를 셀 수 있다.
125!
125/5 => 25개
25/5 => 5개
5/5 => 1개
따라서 답은 31이 된다.
따라서 반복문의 i는 5씩 곱하면서 증가시킨다.
KSJ14님의 해설을 읽고 도움받았다.
코드
#include <iostream>
using namespace std;
int main(void){
int N = 0;
int cnt = 0;
cin >> N;
for(int i = 5; i <= N; i *= 5){
cnt += (N/i);
}
cout << cnt;
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
소수 구하기 백준 1929번 에라토스테네스의 체 (0) | 2020.09.14 |
---|---|
소수 찾기 백준 1978번 (0) | 2020.09.13 |
팩토리얼 백준 10872번 (0) | 2020.09.12 |
스타트와 링크 백준 14889번 (0) | 2020.09.10 |
Two Dots 백준 16929번 (0) | 2020.09.09 |