Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DP
- 문제풀이
- C#
- Tutorial
- dfs
- String
- github
- W3Schools
- python
- guide
- Unity
- Basic
- 오류
- 프로그래밍
- 백준
- 기초
- 재귀
- Class
- c++
- Algorithm
- dynamic
- UE5
- 시작해요 언리얼 2022
- parameter
- Programming
- loop
- w3school
- 파이썬
- Unreal Engine 5
- Material
Archives
- Today
- Total
행복한 개구리
백준 22.03.23. 1676번 - 팩토리얼 0의 개수 본문
n = int(input())
cnt = 0
while n >= 5:
cnt += n//5
n//=5
print(cnt)
- n! = 1*2*3*4....*n입니다.
- n!의 결과값이 뒤에서부터 0을 가지기 위해서는 10의 배수가 곱해져야합니다.
- 이유는 n!를 소인수분해를 했을 때 2ⁿ*5ⁿ만큼 뒤에서부터 0을 가지기 때문입니다.
- 10 = 2*5입니다.
- 구조상 n!는 5의 배수가 2의배수보다 적습니다.
- 따라서 5의 배수의 개수를 구하여 출력해주면 됩니다.
- n!에서 5의 배수의 개수를 구하려면 n / 5 를 하면 알 수 있습니다.
- =>만약 n이 100이라면 5, 10, 15... 100처럼 5의 배수들은 모두 n*5의 형태를 가지므로 5를 하나씩 포함한다고 볼 수 있습니다.
- 여기서 하지만 25의 배수들은 25 = 5*5이므로 5를 두번 포함합니다.
- 따라서 100 / 5 = 20 이므로 cnt += 20을 해주고 20 / 5 를 하여 25,50,75,100과 같이 5를 두번 포함하는 수들의 개수를 구해줄 수 있습니다.
- n/5를 한 번 할때마다 1차라고 한다면 1차식은 5의 1제곱의 개수를 구하고 2차는 5의 2제곱, n차는 5의 n제곱의 개수를 구해나가는 식입니다. 이 모두를 cnt에 모아주면 n!이 5의 cnt제곱을 약수로 가진다는 것을 알 수 있습니다.
- 따라서 100!를 소인수분해 했을 때 5는 cnt제곱만큼 계산되므로
- 25와 같이 5의 n제곱형태를 가지는 수를 계산하기 위해서 n//5를 반복하며 cnt를 추가해줍니다.
- n!에서 5의 배수의 개수를 구하려면 n / 5 를 하면 알 수 있습니다.
- cnt 가 n!를 소인수분해 했을때 5의 k 제곱을 나타내는 k 가 됩니다.
- 이것을 출력하면 됩니다.
'Algorithm > BaekJoon' 카테고리의 다른 글
백준 22.03.23. 10828번 - 스택 (0) | 2022.03.23 |
---|---|
백준 22.03.23. 2004번 - 조합 0의 개수 (0) | 2022.03.23 |
백준 22.03.21. 9375번 - 패션왕 신해빈 (0) | 2022.03.21 |
백준 22.03.20. 1010번 - 다리 놓기 (0) | 2022.03.20 |
백준 22.03.20. 11051번 - 이항 계수2 (0) | 2022.03.20 |