[QBXT游记]Day3 Moring

组合数求模

也就是求 C(n,m)%p=?

Lv.1

其中n,m<=2000,p为任意整数

根据题意大约能看出是\(O(n^2)\)的算法可求

我们知道C(n,m)=[C(n-1,m-1)+C(n-1,m)]%p

所以我们能知道这个数最大能到达杨辉三角的第2000行,可以直接预处理的时候把每个数%p即可

Lv.2

其中n,m<=106,p>=109且为质数

根据定义柿:C(n,m)%p=\(\frac{n!}{n!(n-m)!}\)%p=n!%p x (m!)-1%p x (n-m)-1%p

因为p是质数,所以对于这个柿子,任何数的逆元一定存在

Lv.3

其中n,m<=106,p<=2000且为质数

因为n,m都可能比p大,所以刚才那个做法里面的逆元不存在

这里引入一个新的定理:卢卡斯定理

对于n和m,已知p为质数,n和m都能表示为p进制:\(n=n_k+n_{k-1}+\cdots+n_1\),m同理(这里要保证位数能一致,不够的加上前导0

内容:参见OIwiki,经过lucas分解之后就能得到一个p进制的形式,那样的话逆元是存在的,就可以用Lv2的方法求了

LV.4

其中n,m<=106,p=p1*p2,p1和p2都<=2000且为质数

能知道C(n,m)%p1=a1,C(n,m)%p2=a2(利用刚才的方法)

可以使用连理方程组后Excrt求解

x%p1=a1

x%p2=a2

上一篇:信息安全实训日志day3--作业


下一篇:Java学习day3 流程控制语句