LucasExlucas
Lucas和Exlucas可以求模p意义下大数的组合数。
先考虑p为质数的情况,那么直接上Lucas定理即可。
Lucas 定理基本内容:
\[ C_n^m=C_{n\ mod\ p}^{m\ mod\ p}*C_{n/p}^{m/p}\ (mod\ p)\ p是质数 \]
对于Lucas的实现直接递归处理即可,注意特判n<m的情况。
如果p不为质数,那么用Exlucas求解。
实际上,Exlucas和Lucas定理没有关系……
由于p不为质数,所以可以考虑把p质因数分解:
\[ p=p_1^{c_1}*p_2^{c_2}...p_t^{c_t} \]
那么可以问题可以转化成求解下列每一个式子的值,然后用CRT合并答案即可:
\[ C_n^m\ mod\ p_1^{c_1}\\ C_n^m\ mod\ p_2^{c_2}\\ ...\\ C_n^m\ mod\ p_t^{c_t}\\ \]
继续转化,把组合数写成阶乘形式,相当于要求:
\[ \frac{n!}{m!·(n-m)!}\ mod\ p^k \]
发现直接做不好做,逆元问题都不好解决,考虑把左边每一项中的因子p给提出来:
\[ \frac{\frac{n!}{p^{a_1}}}{\frac{m!}{p^{a_2}}*\frac{(n-m)!}{p^{a3}}}*p^{a^1-a^2-a^3}\ mod\ p^k \]
这样逆元就可以直接用Exgcd球了。
那么现在重点解决的问题又变成了:
\[ n!\ mod\ p^k\ \ \ \ \ \ 其中n还要除去所有的因子p \]
举个例子:n=22,p=3,k=2
把其中所有p(也就是3)的倍数提取出来,得到:
\[ 22!=3^7×(1×2×3×4×5×6×7)×(1×2×4×5×7×8)×(10×11×13×14×16×17)×(19×20×22) \]
可以发现:
\[ (1×2×4×5×7×8)\equiv(10×11×13×14×16×17)\ (mod\ 3) \]
所以对于这种一段一段的可以直接处理,最后求一下它(n/p^k)次方即可。
对于3的次方不需要考虑,因为在外面会乘上来。
那么为什么不把3,6彻底分解呢?
这是为了递归的方便,可以发现存在一项7!,也就是(n/p)!,可以递归处理。
所以在一层层递归中,每次每个含有因数p的数提且仅提出一个p,那么可以实现递归,且最后可以把所有p都提出!
然后就可以开心的求出组合数了O(∩_∩)O!
转载于:https://www.cnblogs.com/Bhllx/p/10659267.html
LucasExlucas相关推荐
最新文章
- 关于strutsdemo实例的理解
- 管理表空间和数据文件——使用OMF方式管理表空间
- 开源分布式中间件 DBLE 快速入门指南
- Yii权限管理工具Srbac使用小结
- 运算符 优先级 结合性
- 23种设计模式之观察者模式
- Oracle之自治事务
- Linux内核信号量:二值信号量/互斥信号量,计数信号量,读写信号量
- EF Ccore 主从配置 最简化
- 运用现代信息技术 推进环评大数据建设
- Python常用模块 之 base64模块
- DSP复习笔记(2)——TMS320F28335芯片内部结构
- 蓝桥杯java技巧总结
- CMake 常用方法
- 【动态规划】字符串编辑距离(Levenshtein距离)算法
- ppt打不开服务器文件,ppt都打不开,没法活了!文件打不开的原因以及解决方法...
- 2022年西式面点师(中级)考试题及模拟考试
- 爬取腾讯新闻中省份疫情数据到Mysql数据库
- 各种可执行文件的打包教程,让你的可执行文件美观起来(打包成一个文件,自定义图标)!!!
- [BZOJ]4755: [Jsoi2016]扭动的回文串
热门文章
- nginx ---- 配置成系统服务
- 为什么在python中整数的值没有限制_为什么在Python中整数是不可变的?
- procreate 笔刷_插画学习必备:2000款Procreate大师级笔刷,超级强大,免费领取
- MYSQL重置密码遇到ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)问题
- SpringBoot报错:If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
- redhad6.4 配置在线yum源
- 普通函数的调用和函数指针的回调
- How to proof Pi
- Xcode6+Cocos2d-x真机调试 报错
- 在 ML2 中配置 OVS vlan network - 每天5分钟玩转 OpenStack(136)