写完才发现基本就是余ay博客里的一样。。
定理:
(mn)=(m/pn/p)×(m%pn%p)(modp)(^n _ m)=(^{n/p}_ {m/p})\times (^{n \% p}_ {m \% p})(mod p)
这样当pp比较小的时候就可以快速处理出很大的组合数。

一个小性质:
当n%p<m%pn\%p < m\%p时,(mn)≡0(modp)(^n_ m) \equiv 0(mod p)
设n=ap+b,m=cp+dn=ap+b,m=cp+d
此时b<db<d,所以n−m=(a−c−1)p+(p+b−d)n-m=(a-c-1)p+(p+b-d)
这样会n!n!中所含的pp的倍数的个数为aa,m!(n−m)!m!(n-m)!中所含的pp的倍数的个数为a−1a-1
还没有考虑n!n!中出现pk(k>1)p^k(k>1)的频率更高的问题。
这样n!m!(n−m)!\frac{n!}{m!(n-m)!}一定就是pp的倍数了

前置:二项式定理(其实就是暴力展开……)
(a+b)n=∑i=0n(in)aibn−i(a+b)^n=\sum_{i=0}^n (^n _i) a^ib^{n-i}

前置:费马小定理
ap−1≡1(modp)a^{p-1} \equiv 1(mod p)(p是质数)

所以:
x≡xp(modp)x \equiv x^p(mod p)
(1+x)p≡1+x≡1+xp(modp)(1+x)^p \equiv 1+x \equiv 1+x^p (mod p)

这里通过二项式定理证明。

(设a=n/p,b=n%p,c=m/p,d=m%pa=n/p,b=n\%p,c=m/p,d=m\%p)
现在有:

(1+x)n≡(1+x)a×(1+x)b(modp)(1+x)^n \equiv (1+x)^a \times (1+x)^b (mod p)
(1+x)n≡(1+xp)a×(1+x)b(modp)(1+x)^n \equiv (1+x^p)^a \times (1+x)^b(mod p)
(1+x)n≡∑i=0a(ia)xi∗p×∑j=0b(jb)xj(modp)(1+x)^n \equiv \sum_ {i=0} ^a(^a_ i)x^{i*p} \times \sum_ {j=0} ^b(^b_ j)x^{j}(mod p)
同时根据二项式定理有:
(1+x)n≡∑i=0n(in)xi(modp)(1+x)^n \equiv \sum_ {i=0} ^n(^n_ i)x^i(mod p)
观察一下这两个式子第mm项的系数
(mn)(^n_ m)和(ia)(jb)(i<p,j<p)(^a_ i)(^b_ j)(i<p,j<p)
然而右边那个带回原字母定义有(m/pn/p)×(m%pn%p)(^{n/p}_ {m/p}) \times (^{n\%p}_ {m\%p})
OAO