백준 문제풀이/수학

[백준] 2004 조합 0의 개수 - python

peach_h 2022. 11. 16. 17:26

2004번: 조합 0의 개수 (acmicpc.net)

 

2004번: 조합 0의 개수

첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다.

www.acmicpc.net

 

처음엔 바보같이 팩토리얼 계산 다한 후에 . . 또 0의 개수를 셀려고 했다.

하지만 우리는 전 문제에서 2*5의 수로 0의 개수를 셀수 있다는 지식을 얻었다.

이를 활용해보자

 

2의 개수를 구하는 함수와 5의 개수를 구하는 함수를 만들고,

이를 이용해 2와 5중 더 작은 수를 뽑으면 된다 !

 

a,b = map(int,input().split())

def count_2(num):
    if num < 2:
        return 0
    count = 0
    while num >= 2:
        count+=num//2
        num = num//2
    return count

def count_5(num):
    if num <5 :
        return 0
    count = 0
    while num >=5:
        count +=num//5
        num = num//5
    return count

cnt2 = count_2(a) - count_2(a-b) - count_2(b)
cnt5 = count_5(a) - count_5(a-b) - count_5(b)

print(min(cnt2,cnt5))

오늘도 하나 해결 !!