http://acm.hdu.edu.cn/showproblem.php?pid=5446

求C(n,m)%(p1p2…pk)的值,其中pi均为质数。

参考:https://www.cnblogs.com/linyujun/p/5199684.html

预备知识:

1.Lucas定理(图片来自百科):当p为素数时,有

2.中国剩余定理:

3.求逆元。

根据中国剩余定理可知,我们求C(n,m)%(p1p2…pk),实际就是在求解同余方程组:

C(n,m)%p1=a1

C(n,m)%p2=a2

……

C(n,m)%p3=a3

最终求得的C(n,m)即是在%(p1p2…pk)意义下的。

根据lucas定理,我们能立刻求出所有a的值。

在那之后用中国剩余定理求解即可。

(另外如果逆元不存在的话我就不知道怎么做了emmm……不过看数据貌似避开了这个问题)

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll qpow(ll k,ll n,ll p){
ll ans=;
while(n){
if(n&)ans=ans*k%p;
k=k*k%p;n>>=;
}
return ans;
}
ll mul(ll a,ll b,ll p){
ll ans=;
while(b){
if(b&)ans=(ans+a)%p;
a=(a<<)%p;b>>=;
}
return ans;
}
ll C(ll n,ll m,ll p){
if(n<m)return ;
if(n==m)return ;
if(m>n-m)m=n-m;
ll cn=,cm=;
for(ll i=;i<m;i++){
cn=cn*(n-i)%p;
cm=cm*(m-i)%p;
}
return cn*qpow(cm%p,p-,p)%p;
}
ll lucas(ll n,ll m,ll p){
ll ans=;
while(n&&m&&ans){
ans=ans*C(n%p,m%p,p)%p;
n/=p;m/=p;
}
return ans;
}
int t;
ll n,m,k,p[],r[],P;
int main(){
cin>>t;
while(t--){
cin>>n>>m>>k;P=;
for(int i=;i<=k;i++){
cin>>p[i];P*=p[i];
r[i]=lucas(n,m,p[i]);
}
ll ans=;
for(int i=;i<=k;i++){
ll w=P/p[i],inv=qpow(w%p[i],p[i]-,p[i]);
ans=(ans+mul(w*inv,r[i],P))%P;
}
printf("%lld\n",ans);
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

HDU5446:Unknown Treasure——题解的更多相关文章

  1. HDU5446 Unknown Treasure(组合数膜合数-->Lucas+中国剩余定理)

    >On the way to the next secret treasure hiding place, the mathematician discovered a cave unknown ...

  2. Unknown Treasure(hdu5446)

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

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

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

  4. hdu 5446 Unknown Treasure lucas和CRT

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

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

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

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

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

  7. Unknown Treasure (卢卡斯 + 孙子定理, 模板题)

    Unknown Treasure 参考链接 : https://www.cnblogs.com/linyujun/p/5199684.html 卢卡斯定理 : C(n, m) % p  =  C(n ...

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

  9. HDU 5446 Unknown Treasure

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

随机推荐

  1. excell 导入 导出

    1.jar包 2.POIUtils工具类 package com.esstglobal.service.utils; import java.io.BufferedInputStream; impor ...

  2. react-native windows系统 红屏报assets缺失 500错误

    指定版本,react-native是facebook用mac系统开发的,windows系统兼容较差,新版本更是问题很多, 相对老版本更加稳定 react-native init demo --vers ...

  3. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  4. 获取App的PackageName包名和LauncherActivity启动页

    第一种情况: 查看手机里面已经安装的App: 用数据线连接手机, 打开开发者模式, 并赋予相关权限: 1. 清除日志: adb logcat -c 2. 启动日志: adb logcat Activi ...

  5. katalon系列四:使用Katalon Studio录制WEB自动化脚本

    一.点击图1工具栏中的+号,选Test Case,新建一个用例. 图1 二.接着点图1录制按钮(地球上有个红点图标),打开的Web Recorder中URL输入百度的地址,浏览器选择Chrome,点击 ...

  6. lesson 24 A skeleton in the cupboard

    lesson 24 A skeleton in the cupboard conceal sth from sb 对某人隐藏某事 He conceals his girlfriend from his ...

  7. lintcode100 删除排序数组中的重复数字

    删除排序数组中的重复数字   给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 您在真实的 ...

  8. vue 与jq 的对比

    vue.react和angular,众所周知,他们是前端框架的3个大佬.这篇主要想对比一下用vue和用jq的区别,至于和其他框架的对比,我想vue的官网说的更为详细. 我算是独自用vue写过一个小型项 ...

  9. Python3 循环表达式

    一 While循环 基本循环 while 条件: 执行内容 #循环体 ... #循环体 ... #循环体 # 若条件为真,执行循环体内容 # 若条件为假,不执行循环体内容 实例1(Python 3.0 ...

  10. POJ 2455 Secret Milking Machine(最大流+二分)

    Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...