BZOJ2982——combination
2024-08-25 15:04:37
1、题意:求 C(n,m) % 10007 ,10007是质数咯 n和m < 2000000000
2、分析:这个东西太大了,显然不能用n!的阶乘预处理的方式搞出来,也不能用递推公式搞出来
于是我们直接lucas定理 C(n,m) % MOD = C(n / MOD, m / MOD) * C(n % MOD, m % MOD) % MOD
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define M 10010 #define MOD 10007 inline int read(){ char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while('0' <= ch && ch <= '9'){ x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } int fac[M], inv[M]; inline void init(){ fac[0] = 1; for(int i = 1; i < MOD; i ++) fac[i] = fac[i - 1] * i % MOD; inv[1] = 1; for(int i = 2; i < MOD; i ++) inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD; inv[0] = 1; for(int i = 1; i < MOD; i ++) inv[i] = inv[i] * inv[i - 1] % MOD; } inline int C(int n, int m){ if(n < m){ return 0; } if(n < MOD && m < MOD){ return fac[n] * inv[m] % MOD * inv[n - m] % MOD; } return C(n / MOD, m / MOD) * C(n % MOD, m % MOD) % MOD; } int main(){ int T = read(); init(); while(T --){ int n = read(), m = read(); printf("%d\n", C(n, m)); } return 0; }
最新文章
- JsonUtil
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
- span 与p 的区别,以及内联元素的作用
- (转)ASP.NET并发处理
- spring中@param和mybatis中@param使用区别
- SoapUI 之 JDBC请求
- 前端MVC Vue2学习总结(五)——表单输入绑定、组件
- RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用
- VB.NET获取系统特殊目录
- excel vba获取拼音
- 详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
- 【Alsa】播放声音和录音详细流程
- redis主从配置<;转>;
- VMware快照的工作原理
- 学些goosman-lei的博客感触
- pygame系列_箭刺Elephant游戏_源码下载
- 【linux】linux DD命令
- [转载]Javassist 使用指南(一)
- [Linux]Ubuntu中的System Setting
- ng-file-upload - samples