728x90
반응형
https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제
N! 에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
출력
첫째 줄에 구한 0의 개수를 출력한다.
풀이
0이 되기 위해서는 2와 5가 필요하다.
따라서 1부터 N까지 소인수분해한 결과 2와 5의 개수를 세면 팩토리얼 값의 0의 개수를 구할 수 있다.
이때, 2의 개수는 5의 개수보다는 많은 것이다. 따라서 5의 개수만 세면 그 값이 0의 개수와 같다.
코드
#include <iostream>
using namespace std;
int main() {
int a;
int ans = 0;
cin >> a;
for(int i = 1; i <= a; i++) {
int tmp = i;
int cnt = 0;
while(1) {
if(tmp % 5 == 0) {
cnt++;
tmp /= 5;
}
else break;
}
ans += cnt;
}
cout << ans;
}
결과
너무 어렵게 생각했었다. 소인수분해 개념을 기억하고 다음 문제부터 유용하게 사용해야겠다.
728x90
반응형
'BOJ 백준 > 수학' 카테고리의 다른 글
[BOJ] 9461번: 파도반 수열 (0) | 2022.04.04 |
---|---|
[BOJ] 11659번: 구간 합 구하기 4 (0) | 2022.04.04 |
[BOJ] 1541번: 잃어버린 괄호 (0) | 2022.04.03 |
[BOJ] 10816번: 숫자 카드 2 (2) | 2021.07.22 |