写完才发现基本就是余ay博客里的一样。。
定理:
(mn)=(m/pn/p)×(m%pn%p)(modp)
这样当p比较小的时候就可以快速处理出很大的组合数。
一个小性质:
当n%p<m%p时,(mn)≡0(modp)
设n=ap+b,m=cp+d
此时b<d,所以n−m=(a−c−1)p+(p+b−d)
这样会n!中所含的p的倍数的个数为a,m!(n−m)!中所含的p的倍数的个数为a−1
还没有考虑n!中出现pk(k>1)的频率更高的问题。
这样m!(n−m)!n!一定就是p的倍数了
前置:二项式定理(其实就是暴力展开……)
(a+b)n=∑i=0n(in)aibn−i
前置:费马小定理
ap−1≡1(modp)(p是质数)
所以:
x≡xp(modp)
(1+x)p≡1+x≡1+xp(modp)
这里通过二项式定理证明。
(设a=n/p,b=n%p,c=m/p,d=m%p)
现在有:
(1+x)n≡(1+x)a×(1+x)b(modp)
(1+x)n≡(1+xp)a×(1+x)b(modp)
(1+x)n≡∑i=0a(ia)xi∗p×∑j=0b(jb)xj(modp)
同时根据二项式定理有:
(1+x)n≡∑i=0n(in)xi(modp)
观察一下这两个式子第m项的系数
(mn)和(ia)(jb)(i<p,j<p)
然而右边那个带回原字母定义有(m/pn/p)×(m%pn%p)
OAO