序言
晚上的时间真的是不会利用……
和李某学习了很多积极向上的内容……
维基百科可以查到好~多~积极向上的内容……是学习(FuBai)的好工具!
前排膜拜百科
维基百科
百度百科
前排预警:这篇Blog没有任何公式!绝对没有公式!
Lucas Theorem
现给出公式:
(mn)≡(m/pn/p)⋅(mmodpnmodp)(modp)
(
m
n
)
≡
(
m
/
p
n
/
p
)
⋅
(
m
mod
p
n
mod
p
)
(
mod
p
)
在
p
p
较小的情况下,可以通过递归在的时间内求出组合数。
证明
设
mn=∑i=0kmipi=∑i=0knipi
m
=
∑
i
=
0
k
m
i
p
i
n
=
∑
i
=
0
k
n
i
p
i
在
m,n
m
,
n
化为
p
p
进制数下时,Lucas公式可变式为:
由费马小定理可得:
xp∴xp+1(x+1)p∴(x+1)p∴(x+1)pi≡x(modp)≡x+1(modp)≡x+1(modp)≡xp+1(modp)≡xpi+1(modp)
x
p
≡
x
(
mod
p
)
∴
x
p
+
1
≡
x
+
1
(
mod
p
)
(
x
+
1
)
p
≡
x
+
1
(
mod
p
)
∴
(
x
+
1
)
p
≡
x
p
+
1
(
mod
p
)
∴
(
x
+
1
)
p
i
≡
x
p
i
+
1
(
mod
p
)
利用结论推导式子:
∑n=0m(mn)xn∑n=0m(mn)xn∴(mn)=(x+1)m=∏i=0k((x+1)pi)mi≡∏i=0k(xpi+1)mi=∏i=0k(∑ni=0mi(mini)xnipi)=∏i=0k(∑ni=0p−1(mini)xnipi)=∑n=0m(∏i=0k(mini))xn(modp)=∏i=0k(mini)(modp)
∑
n
=
0
m
(
m
n
)
x
n
=
(
x
+
1
)
m
=
∏
i
=
0
k
(
(
x
+
1
)
p
i
)
m
i
≡
∏
i
=
0
k
(
x
p
i
+
1
)
m
i
=
∏
i
=
0
k
(
∑
n
i
=
0
m
i
(
m
i
n
i
)
x
n
i
p
i
)
=
∏
i
=
0
k
(
∑
n
i
=
0
p
−
1
(
m
i
n
i
)
x
n
i
p
i
)
∑
n
=
0
m
(
m
n
)
x
n
=
∑
n
=
0
m
(
∏
i
=
0
k
(
m
i
n
i
)
)
x
n
(
mod
p
)
∴
(
m
n
)
=
∏
i
=
0
k
(
m
i
n
i
)
(
mod
p
)
问题得证。
实际应用
给道例题吧:
P2183 [国家集训队]礼物
(就是怕你不看证明做直接用去做题,我才把例题放到后面。)
快速求大组合数还是很有用的……
局限性
当你想直接用的时候,你需要注意模数 p p <script type="math/tex" id="MathJax-Element-14">p</script>为质数。