기록하는삶

[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 11402번 _ 이항 계수 4 본문

백준(Python)/수학(Mathematics)

[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 11402번 _ 이항 계수 4

mingchin 2022. 4. 14. 01:44
728x90
반응형

https://www.acmicpc.net/problem/11402

 

11402번: 이항 계수 4

첫째 줄에 \(N\), \(K\)와 \(M\)이 주어진다. (1 ≤ \(N\) ≤ 1018, 0 ≤ \(K\) ≤ \(N\), 2 ≤ \(M\) ≤ 2,000, M은 소수)

www.acmicpc.net

[아이디어]

1) 뤼카의 정리를 활용한다.

출처: 위키백과

p가 소수로 한정된 상황이기 때문에, n과 k를 뒤에서부터 p진수로 표현하며 각 숫자에 대해 조합을 구해 곱하되, 중간에 m,n,조합의 곱(x) 중 하나라도 0이 되는 순간 반복문을 탈출하도록 했다.

import math
n,m,d=map(int,input().split())
x=1
while n or m:
    x=x*math.comb(n%d,m%d)%d
    if x==0:break
    n//=d
    m//=d
print(x)

코드가 꽤 짧아서 숏코딩을 만들어봤다.

import math
n,m,d=map(int,input().split())
x=1
while n*m*x:
    x=x*math.comb(n%d,m%d)%d
    n//=d;m//=d
print(x)
728x90
반응형