ps:problems:boj:1676
목차
팩토리얼 0의 개수
| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 1676 |
| 문제명 | 팩토리얼 0의 개수 |
| 레벨 | 실버 5 |
| 분류 |
팩토리얼 |
| 시간복잡도 | O(logn) |
| 인풋사이즈 | n<=600 |
| 사용한 언어 | Python 3.13 |
| 제출기록 | 32412KB / 36ms |
| 최고기록 | 32ms |
| 해결날짜 | 2026/01/26 |
풀이
- 10^e가 n!을 나누는 가장 큰 e값, 다시말해 n!에 포함된 10의 개수를 구하면 된다. 10=2*5 이므로 이는 n!에 포함된 2의 개수와 5의 개수 중 작은 것을 취하면 되는데, 이 값은 언제나 5의 개수가 작으므로, 결국 n!에 포함된 5의 개수만 구하면 된다. 르장드르 공식을 사용하면 간단하다.
- n의 범위가 매우 작아서, 그냥 n//5 + n//25 + n//125 를 계산하는 것 만으로도 풀린다.
- 시간복잡도는 O(logn) 이지만.. 위에서 말했듯 n이 워낙 작아서 그냥 상수에 가깝다..
코드
"""Solution code for "BOJ 1676. 팩토리얼 0의 개수".
- Problem link: https://www.acmicpc.net/problem/1676
- Solution link: http://www.teferi.net/ps/problems/boj/1676
"""
def main():
N = int(input())
count = 0
while N := N // 5:
count += N
print(count)
if __name__ == '__main__':
main()
ps/problems/boj/1676.txt · 마지막으로 수정됨: 2026/01/26 08:26 저자 teferi

토론