楊輝三角遞推c(
i,j)
=c(i
−1,j
)+c(
i−1,
j−1)
題目詳見noip2016d2t1
code
for(int i=2;i
<=maxn;i++)
for(int j=2;j
c[i]
[j]=(c[i-1]
[j]+c[i-1]
[j-1])%k;
乘法逆元:(a
/b)%
p=a∗
(bp−
2)(p為素數)
如果p為素數,那麼k的逆元就是k(
p−2)
逆元可以利用擴充套件歐幾里德或尤拉函式求得c(
n,m)
=n!/
(m!∗
(n−m
)!)
那麼可以先計算出n!,m!,(n-m)!對p取模的餘數,那麼轉化為a/
b=x 的問題
因為p為素數,所以等價於bx
+py=
a 然後用擴充套件的歐幾里得定理算出 bx
′+py
′=1 的解,x=
x′∗a
就得到了最終的x的值,即c(
m,n)
得值題目詳見雅禮集訓題目
code
ll inv(ll a)
ll c(ll n,ll m)
return up*inv(down)%p;
}
用lucas定理求組合數,適用於模數p較小的情況lu
cas(
n,m,
p)=c
(n%p
,m%p
)∗lu
cas(
n/p,
m/p,
p)
題目詳見洛谷2675
code
void work()
ll c(ll n,ll m)
組合數的幾種求法
cnm p c n m p cnm p 0 m n 1000 0 leq m leq n leq 1000 0 m n 1000 1 p 1e9 1 leq p leq 1e9 1 p 1e 9,直接求 void com int n,int p 0 m n 1 e18 0 leq m leq n l...
Lucas定理與大組合數的取模的求法總結
首先給出這個lucas定理 a b是非負整數,p是質數。ab寫成p進製 a a n a n 1 a 0 b b n b n 1 b 0 則組合數c a,b 與c a n b n c a n 1 b n 1 c a 0 b 0 modp同餘 即 lucas n,m,p c n p,m p lucas ...
Lucas定理與大組合數的取模的求法總結
首先給出這個lucas定理 a b是非負整數,p是質數。ab寫成p進製 a a n a n 1 a 0 b b n b n 1 b 0 則組合數c a,b 與c a n b n c a n 1 b n 1 c a 0 b 0 modp同餘 即 lucas n,m,p c n p,m p lucas ...