hdu 5446 Unknown Treasure Lucas定理+中国剩余定理
Unknown Treasure
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 2209 Accepted Submission(s): 821
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 of primes. Following on the next line are k different primes p1,...,pk. It is guaranteed that M=p1⋅p2⋅⋅⋅pk≤1018 and pi≤105 for every i∈{1,...,k}.
9 5 2
3 5
#include<iostream>
#include<stdio.h>
using namespace std;
long long pri[];
long long a[];
long long ext_gcd(long long a,long long b,long long *x,long long *y)
{
if(b==)
{
*x=,*y=;
return a;
}
long long r = ext_gcd(b,a%b,x,y);
long long t = *x;
*x= *y;
*y = t - a/b * *y;
return r;
}
long long quick_mod(long long n,long long m,long long mod)
{
long long ans=;
while(m)
{
if(m&)
ans=(ans*n)%mod;
m>>=;
n=(n*n)%mod;
}
return ans%mod;
}
long long get_c(long long n,long long m,long long mod)
{
long long a=,b=;
for(int i=; i<=m; i++)
{
b=b*i%mod;
a=a*(n-i+)%mod;
}
return (a*(quick_mod(b,mod-,mod)))%mod;
}
long long Lucas(long long n,long long m,long long mod)
{
if(m==) return ;
return (Lucas(n/mod,m/mod,mod)*get_c(n%mod,m%mod,mod))%mod;
}
long long mul(long long a,long long n,long long mod)
{
a = (a%mod+mod)%mod;
n = (n%mod+mod)%mod;
long long ret =;
while(n)
{
if(n&)
ret=(ret+a)%mod;
a=(a+a)%mod;
n>>=;
}
return ret%mod;
}
long long chinese_reminder(long long a[],long long pri[],int len)
{
long long mul_pri=;
long long res=;
for(int i=;i<len;i++)
{
mul_pri*=pri[i];
}
for(int i=;i<len;i++)
{
long long m = mul_pri/pri[i];
long long x,y;
ext_gcd(pri[i],m,&x,&y);
//res=(res+y*m*a[i])%mul_pri;
res=(res+mul(mul(y,m,mul_pri),a[i],mul_pri))%mul_pri;
}
return ((res%mul_pri+mul_pri)%mul_pri);
}
int main()
{
int t;
long long n,m;
int k;
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d%d",&n,&m,&k);
for(int i=; i<k; i++)
scanf("%I64d",pri+i);
for(int i=; i<k; i++)
{
a[i]=Lucas(n,m,pri[i]);
}
long long ans = chinese_reminder(a,pri,k);
printf("%I64d\n",ans);
}
return ;
}
hdu 5446 Unknown Treasure Lucas定理+中国剩余定理的更多相关文章
- HDU 5446 Unknown Treasure Lucas+中国剩余定理+按位乘
HDU 5446 Unknown Treasure 题意:求C(n, m) %(p[1] * p[2] ··· p[k]) 0< n,m < 1018 思路:这题基本上算是模版题了 ...
- HDU 5446 Unknown Treasure Lucas+中国剩余定理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 Unknown Treasure 问题描述 On the way to the next se ...
- hdu 5446 Unknown Treasure lucas和CRT
Unknown Treasure Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- HDU 5446 Unknown Treasure(lucas + 中国剩余定理 + 模拟乘法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题目大意:求C(n, m) % M, 其中M为不同素数的乘积,即M=p1*p2*...*pk, ...
- 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.. ...
- 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 ...
- 【bzoj3782】上学路线 dp+容斥原理+Lucas定理+中国剩余定理
题目描述 小C所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M).小C家住在西南角,学校在东北角.现在有T个路口进行施工,小C不能通过这些路口.小C喜欢走最短的路径到达目的 ...
- 卢卡斯定理&&中国剩余定理
卢卡斯定理(模数较小,且是质数) 式子C(m,n)=C(m/p,n/p)*C(m%p,n%p)%p 至于证明(我也不会QAQ,只要记住公式也该就好了). 同时卢卡斯定理一般用于组合数取模上 1.首先当 ...
- hdu 5446 Unknown Treasure 卢卡斯+中国剩余定理
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
随机推荐
- VS2012 打开cs文件报未找到与约束错误
一.问题发生 VS2012,更新补丁后的残忍--创建项目未找到与约束匹配的导出 创建项目时无法成功创建,而且提示:未找到与约束ontractNameMicrosoft.VisualStudio.Tex ...
- java 入门 第二季3
1.继承 1.java是单继承的,一个子类只有一个父类 父类,基类 子类,派生类 2.继承的好处:子类拥有父类的所有属性和方法,属性的修饰符不能是private 3.语法规则: class 子类 ex ...
- Effective C++ -----条款40:明智而审慎地使用多重继承
多重继承比单一继承复杂.它可能导致新的歧义性,以及对virtual继承的需要. virtual继承会增加大小.速度.初始化(及赋值)复杂度等等成本.如果virtual base classes不带任何 ...
- JAVA回调接口的理解
A类持有B接口的对象引用,B接口有一个callBack()方法,C类是B类的实现类,实现了callBack()方法,把C类传入A类,当A类执行完操作后调用callBack()方法,这时候A调用的就是C ...
- jquery this 与javascript的this
<div class="list"> <table> <thead> <tr> <th width="110&quo ...
- CountdownLatchTest
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java ...
- Mysql之复制选项与监控
1.Slave 筛选选项: --replicate-do-db ,同步复制哪些库 --replicate-ignore-db,忽略哪些库 --replicate-do-table=db_name.t ...
- Java ANT build.xml
详情请参考:http://www.cnblogs.com/xionghui/archive/2012/03/13/2393679.html
- KMP算法学习
kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置.常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(n ...
- find 查找文件 -exec 然后压缩 查看tar包的内容
[root@cs Downloads]# find ./ -name "banner*" -exec tar -cvf k.tar "{}" \; ./bann ...