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