【数论】卢卡斯定理模板 洛谷P3807

>>>>题目

【题目】

https://www.luogu.org/problemnew/show/P3807

【输入格式】

第一行一个整数T(T\le 10T≤10),表示数据组数

第二行开始共T行,每行三个数n m p,意义如上

【输出格式】

共T行,每行一个整数表示答案。

【输入样例】

2
1 2 5
2 1 5

【输出样例】

3
3

>>>>分析

emmmm模板题还是不用分析了吧

卢卡斯定理解决的就是组合数C(n,m)中m,n太大的情况

根据定理的内容,C(n,m)=C(n/p,m/p)*C(n%p,m%p)其中p是模数

我们只需要不断递归求解C(n/p,m/p)就可以啦

因为同余方程不满足两边同时除一个数,那么只能将除一个数转化成乘这个数在模数p意义下的逆元

求逆元的方式有很多种,在我的另一个博客里面会有详细介绍φ(>ω<*)

#include<bits/stdc++.h>
#define ll long long
#define L I64d
#define maxn 100005
using namespace std;
ll fac[*maxn];
int p,T;
void init(int n,int m)//预处理阶乘
{
fac[]=;
for(int i=;i<=n+m;i++) fac[i]=fac[i-]*i%p;
}
ll quickpow(ll x,ll y)
{
ll ans=;
while(y)
{
if(y&) ans=ans*x%p;
x=x*x%p;
y=y>>;
}
return ans%p;
}
ll C(ll m,ll n)
{
if(m>n) return ;
return fac[n]*quickpow(fac[m],p-)%p*quickpow(fac[n-m],p-);//费马小定理求逆元
}
ll lucas(ll m,ll n)
{
if(!m) return ;
return lucas(m/p,n/p)*C(m%p,n%p)%p;
}
int main()
{
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d%d",&n,&m,&p);
init();
printf("%Ld\n",lucas(m,n+m));
}
return ;
}
/*
2
1 2 5
2 1 5
*/

完结撒花✿✿ヽ(°▽°)ノ✿

最新文章

  1. VIM使用技巧总结
  2. fancybox,Ckeditor,jscrollpane 笔记串烧
  3. LeetCode Letter Combinations of a Phone Number 电话号码组合
  4. 第四十四篇、iOS开发中git添加.gitignore文件
  5. python学习之成员信息增删改查
  6. codeforces 519C.. A and B and Team Training
  7. javascript限制input只允许输入数字
  8. Unity5UGUI 官方教程学习笔记(二)Rect Transform
  9. VS2012编写C语言项目
  10. 如何在局域网安装Redmine(转贴)
  11. 201521123050 《Java程序设计》第12周学习总结
  12. MFC与Webbrower交互(通过JS)
  13. H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
  14. Java学习笔记三:运算符
  15. Groovy 类名称赋值为变量使用(newInstance &amp; new)
  16. java web 项目中 简单定时器实现 Timer
  17. UIAlertController简单使用
  18. crontab 选择编辑器 select-editor
  19. Netty1
  20. 第十四个目标 (fzu)

热门文章

  1. 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)
  2. 清除Windows 10的文件夹浏览痕迹
  3. fork项目适合全局替换注释说明
  4. fang
  5. 使用Semaphore同步,经典银行账户问题
  6. opencv学习之路(34)、SIFT特征匹配(二)
  7. day13函数的嵌套定义,global、nonlocal关键字,闭包及闭包的运用场景,装饰器
  8. The dependency `XXX` is not used in any concrete target.
  9. shell脚本中如何插入其它脚本?
  10. 【BZOJ5194】Snow Boots