题意: 大组合数取余 (素数连乘)

思路:

对于答案 X

X % pi = ai === C(m,n) % pi;

然后就是用孙子定理求出X, ai 用 卢卡斯定理求得

中间 LL * LL 会爆, 运用按位乘法

对于 m * n  % K, 把 m 看成 二进制形式的多项式, 拆开和 n 相乘, 再取余

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 131;
typedef long long LL; LL Pow_Mod(LL a, LL b, LL p)
{
LL ret = 1;
while(b)
{
if(b & 1) ret = (ret * a) % p;
a = a * a % p;
b >>= 1;
}
return ret;
} void Exgcd(LL a, LL b, LL& d, LL& x, LL& y)
{
if(b == 0) { d = a, x = 1, y = 0; }
else { Exgcd(b,a%b,d,y,x); y -= x * (a / b); }
}
///////////////////////////// Lucas
LL Fac[maxn], Inv[maxn]; void Init(LL n)
{
Fac[0] = 1;
for(LL i = 1; i < n; ++i) Fac[i] = Fac[i-1] * i % n;
Inv[n-1] = Pow_Mod(Fac[n-1], n-2, n);
for(LL i = n-2; i >= 0; --i) Inv[i] = Inv[i+1] * (i + 1) % n;
} LL C(LL m, LL n, LL p)
{
if(n > m || m < 0 || n < 0) return 0;
return (Fac[m] * Inv[n]) % p * Inv[m-n] % p;
} LL Lucas(LL m, LL n, LL p)
{
if(n == 0) return 1;
return Lucas(m/p, n/p, p) * C(m%p, n%p, p) % p;
}
//////////////////////////////////
LL Ai[maxn], Pi[maxn]; LL mul(LL a, LL b, LL p)
{
a = (a % p + p) % p;
b = (b % p + p) % p;
LL ret = 0;
while(b)
{
if(b & 1) ret = (ret + a) % p;
b >>= 1;
a <<= 1;
a %= p;
}
return ret;
} LL China(int n, LL *a, LL *m)
{
LL x, y, d, M = 1;
LL ret = 0;
for(int i = 1; i <= n; ++i) M = M * m[i];
for(int i = 1; i <= n; ++i)
{
LL w = M / m[i];
//y = Pow_Mod(w, m[i]-2, m[i]); WA
Exgcd(m[i],w,d,d,y) ;
ret = (ret + mul(a[i], mul(y, w, M), M)) % M;
}
return ret;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
LL m, n; int k;
scanf("%lld%lld%d", &m, &n, &k);
for(int i = 1; i <= k; ++i)
{
scanf("%llu",&Pi[i]);
Init(Pi[i]);
Ai[i] = Lucas(m,n,Pi[i]);
}
LL ans = China(k,Ai,Pi);
printf("%lld\n",ans);
}
}

  

HDU 5446的更多相关文章

  1. 中国剩余定理&Lucas定理&按位与——hdu 5446

    链接: hdu 5446 http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意: 给你三个数$n, m, k$ 第二行是$k$个数,$p_1,p_2,p_ ...

  2. 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.. ...

  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和CRT

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

  6. HDU 5446 Unknown Treasure(Lucas定理+CRT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5446 [题目大意] 给出一个合数M的每一个质因子,同时给出n,m,求C(n,m)%M. [题解] ...

  7. hdu 5446 lucas+crt+按位乘

    http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意:题目意思很简单,要你求C(n,m)mod p的值 p=p1*p2*...pn; 题解:对于C(n,m ...

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

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

  9. HDU 5446 中国剩余定理+lucas

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

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

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

随机推荐

  1. Win10升级.NET Framework 3.5或2.0遇到错误0x800f081f怎么办

    为了让win10系统更好地运行游戏,很多玩家都会在电脑中安装.NET Framework 3.5或.NET Framework 2.0.不过,部分用户在更新升级.NET Framework 3.5和2 ...

  2. 解析ArcGis的标注(三)——标注的放置 与 转注记修改

    该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. 写着写着发现ArcGis标注的破事儿好多啊 ...

  3. docker 系列 - Dock高阶知识点文章汇集

    docker 技术已经研究了一段时间, 基本的知识点和使用场景比较清楚了, 还有一些比较高阶的内容未曾尝试, 将来工作中如果能用到, 再深入研究吧. 这篇博文汇总了一些有用的文章链接. ======= ...

  4. Jquery触发Change事件

    Jquery直接使用val的话不会触发Change事件需要做如下处理$("#"+p_id).val(p_time); $("#"+p_id).change();

  5. SCTP一到多式流分回射服程序

    一.服务器程序 #include <stdlib.h> #include <string.h> #include <strings.h> #include < ...

  6. springboot06-swagger2 自动化api文档

    1.springboot 项目中添加swagger2依赖: <dependency> <groupId>org.springframework.boot</groupId ...

  7. Web Of Science

  8. moment.js 时间戳转换

    1. 一段时间以0点为标准 : 2018-03-15 00:00:00- 2018-03-21 00:00:00 let startTime = moment('2018-03-15').format ...

  9. 迅为6818开发板-Cortex-A5架构丨支持4G全网通丨GPS丨WIFI丨另有丰富的扩展模块

    迅为6848开发板-S5P6818芯片采用Cortex-A53架构! Cortex-A53和其高端兄弟Cortex-A57一样都是64位架构,实目前ARM的主力,且二者的指令集是完全兼容的,可以组成新 ...

  10. 第27月第25天 clang -rewrite-objc main.m

    1.clang -rewrite-objc main.m #import <objc/runtime.h> #import<objc/message.h> #import &l ...