【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5446

【题目大意】

  给出一个合数M的每一个质因子,同时给出n,m,求C(n,m)%M。

【题解】

  首先我们可以用Lucas定理求出对答案对每个质因子的模,然后我们发现只要求解这个同余方程组就可以得到答案,所以我们用中国剩余定理解决剩下的问题。

【代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=100005;
LL f[N],rf[N];
LL mul(LL x,LL y,LL P){return (x*y-(LL)(x/(long double)P*y+1e-3)*P+P)%P;}
LL pow(LL a,LL b,LL P){LL t=1;for(;b;b>>=1,a=mul(a,a,P))if(b&1)t=mul(t,a,P);return t;}
void init(int n){
f[0]=1;for(int i=1;i<n;i++)f[i]=f[i-1]*i%n;
rf[n-1]=pow(f[n-1],n-2,n);
for(int i=n-1;i;i--)rf[i-1]=rf[i]*i%n;
}
LL C(int n,int m,int mod){
if(m>n||m<0||n<0)return 0;
return f[n]*rf[m]%mod*rf[n-m]%mod;
}
LL lucas(LL n,LL m,LL P){
if(n<m)return 0;
if(!m||n==m)return 1;
return C(n%P,m%P,P)*lucas(n/P,m/P,P)%P;
}
LL exgcd(LL a,LL b,LL& x,LL& y){
if(b==0){x=1;y=0;return a;}
LL d=exgcd(b,a%b,y,x);
y-=x*(a/b);
return d;
}
LL CRT(LL* a,LL* b,int n){
LL P=1,d,y,x=0;
for(int i=0;i<n;i++)P*=a[i];
for(int i=0;i<n;i++){
LL w=P/a[i];
exgcd(a[i],w,d,y); y=(y%P+P)%P;
x=(x+mul(mul(y,w,P),b[i],P));
}return (x+P)%P;
}int T,k;
LL n,m,a[15],p[15];
int main(){
scanf("%d",&T);
while(T--){
scanf("%lld%lld%d",&n,&m,&k);
for(int i=0;i<k;i++){
scanf("%lld",&p[i]);
init(p[i]);
a[i]=lucas(n,m,p[i]);
}printf("%lld\n",CRT(p,a,k));
}return 0;
}

HDU 5446 Unknown Treasure(Lucas定理+CRT)的更多相关文章

  1. hdu 5446 Unknown Treasure lucas和CRT

    Unknown Treasure Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  2. hdu 5446 Unknown Treasure Lucas定理+中国剩余定理

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  3. HDU 5446 Unknown Treasure Lucas+中国剩余定理+按位乘

    HDU 5446 Unknown Treasure 题意:求C(n, m) %(p[1] * p[2] ··· p[k])     0< n,m < 1018 思路:这题基本上算是模版题了 ...

  4. HDU 5446 Unknown Treasure Lucas+中国剩余定理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 Unknown Treasure 问题描述 On the way to the next se ...

  5. HDU 5446 Unknown Treasure(lucas + 中国剩余定理 + 模拟乘法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题目大意:求C(n, m) % M, 其中M为不同素数的乘积,即M=p1*p2*...*pk, ...

  6. Hdu 5446 Unknown Treasure (2015 ACM/ICPC Asia Regional Changchun Online Lucas定理 + 中国剩余定理)

    题目链接: Hdu 5446 Unknown Treasure 题目描述: 就是有n个苹果,要选出来m个,问有多少种选法?还有k个素数,p1,p2,p3,...pk,结果对lcm(p1,p2,p3.. ...

  7. HDU 5446——Unknown Treasure——————【CRT+lucas+exgcd+快速乘+递推求逆元】

    Each test case starts with three integers n,m,k(1≤m≤n≤1018,1≤k≤10) on a line where k is the number o ...

  8. hdu 5446 Unknown Treasure 卢卡斯+中国剩余定理

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  9. HDU 5446 Unknown Treasure

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

随机推荐

  1. php代码20个实用技巧 ------ 转发自菜鸟教程

    1.不要实用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点:它首先查找指定的php包含路径,然后查找当前目录,因此会检查过 ...

  2. Android Shape画圆,矩形

    画圆环代码如下: 画圆环,外边的边界宽度大一点即可: <?xml version="1.0" encoding="utf-8"?> <shap ...

  3. avalon.js 多级下拉框实现

    学习avalon.js的时候,有一个多级下拉框的例子,地址 戳这里 代码实现了联动, 但是逻辑上面理解有点难度,获取选择的值 和 页面初始化 功能存在问题. 在写地图编辑的时候,也用到了多级下拉框,特 ...

  4. 解决apache启动问题:httpd: Could not reliably determine the server's fully

    httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for Se ...

  5. RedMine 版本管理工具

    一.介绍: Redmine 是一个开源的.基于Web的项目管理和缺陷跟踪工具.它用日历和甘特图辅助项目及进度可视化显示.同时它又支持多项目管理.Redmine是一个自由开放 源码软件解决方案,它提供集 ...

  6. Eclipse Rcp

    http://blog.csdn.net/soszou/article/details/7996748

  7. 自绘Tab控件

    自绘tab按钮效果图如下: 使用例子: MyTabControl *tabControl = NULL; tabControl = new MyTabControl();tabControl-> ...

  8. Silverlight Socket 实现收发信息

    原文 http://www.cnblogs.com/ZetaChow/archive/2009/05/16/2237347.html 刚接触Silverlight的时候,除了其异步应用WCF.流媒体. ...

  9. 运用JavaScript构建你的第一个Metro式应用程序(onWindows 8)(三)

    原文 http://blog.csdn.net/zhangxin09/article/details/6793593 这是<运用 JavaScript构建你的第一个Metro式应用程序>系 ...

  10. 奇怪的问题:android:focusable和android:clickable造成ListView的点击不了

    今天花了我很长时间,才解决一个很奇怪的问题,就是在ListView的点击反应不了的问题…… 在ListView中,如果其中一个元素设置为android:focusable="true&quo ...