"0830 commoncode"의 두 판 사이의 차이
ph
잔글 |
잔글 |
||
3번째 줄: | 3번째 줄: | ||
<pre> | <pre> | ||
p = int(1e9)+7 #example. this is a prime number | p = int(1e9)+7 #example. this is a prime number | ||
− | def anmodp(a, n): | + | def anmodp(a, n): # a^n mod p |
if n==1: | if n==1: | ||
return a%p | return a%p | ||
13번째 줄: | 13번째 줄: | ||
return (tmp**2)%p | return (tmp**2)%p | ||
− | def fac(n): | + | def fac(n): # n! mod p |
k = 1 | k = 1 | ||
for i in range(2, n+1): | for i in range(2, n+1): | ||
20번째 줄: | 20번째 줄: | ||
return k | return k | ||
− | def invfac(n): | + | def invfac(n): # 1/(n!) (mod p) |
return anmodp(fac(n), p-2) #euler totient | return anmodp(fac(n), p-2) #euler totient | ||
− | def comb(x): # | + | def comb(x): # input = int array |
s = sum(x) | s = sum(x) | ||
ans = fac(s) | ans = fac(s) |
2017년 8월 30일 (수) 17:56 판
$$ \frac{(a+b+c+\cdots+z)!}{a!b!c!\cdots z!} \pmod p \text{ where } p \text{ is a prime}$$
p = int(1e9)+7 #example. this is a prime number def anmodp(a, n): # a^n mod p if n==1: return a%p tmp = anmodp(a, n/2) if n%2==1: #odd return (a*(tmp**2))%p else: return (tmp**2)%p def fac(n): # n! mod p k = 1 for i in range(2, n+1): k *= i k %= p return k def invfac(n): # 1/(n!) (mod p) return anmodp(fac(n), p-2) #euler totient def comb(x): # input = int array s = sum(x) ans = fac(s) for i in x: ans *= invfac(i) return ans % p