구현, 수학
[백준] 1676. 팩토리얼 0의 개수 풀이
hch06
2025. 2. 2. 18:30
https://www.acmicpc.net/problem/1676
팩토리얼 연산 후 뒷자리에 0이 있다는 것은 0의 개수만큼의 10을 인수로 가진다는 의미이다.
10을 다시 소인수분해하면 2x5가 된다.
즉, 팩토리얼에서 모두 소인수분해 한 후 인수 2와 5를 짝지어 개수를 세면 원하는 값을 얻을 수 있다.
이때 팩토리얼에서 인수 2는 항상 인수 5보다 많으므로 인수 5의 개수를 세면 연산 후 뒷자리 0의 개수를 세는것과
같은 효과가 나온다.
따라서 팩토리얼의 숫자들이 5의 배수인지, 배수라면 인수5를 몇개나 가지고 있는 검사하여 그 개수를 출력한다.
C
더보기
더보기
#include <stdio.h>
int countZero(int n){
int cnt = 0;
for(int i = 1; i <= n; i++){
int v = i;
while(v % 5 == 0) {cnt++; v /= 5;}
}
return cnt;
}
int main(){
// int n, m; scanf("%d %d", &n, &m);
int n; scanf("%d", &n);
printf("%d", countZero(n));
}
Python
더보기
더보기
n = int(input())
cnt = 0
for i in range(1, n+1):
v = i
while v % 5 == 0: cnt += 1; v /= 5
print(cnt)