hdu 5446 Unknown Treasure 中国剩余定理+lucas
求C(n, m)%p的值, n, m<=1e18, p = p1*p2*...pk. pi是质数。
先求出C(n, m)%pi的值, 然后这就是一个同余的式子。 用中国剩余定理求解。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long
ll a[], b[];
void extend_Euclid(ll a, ll b, ll &x, ll &y)
{
if(b == )
{
x = ;
y = ;
return;
}
extend_Euclid(b, a % b, x, y);
ll tmp = x;
x = y;
y = tmp - (a / b) * y;
}
ll mul(ll a, ll n, ll mod)
{
a = (a%mod+mod)%mod;
n = (n%mod+mod)%mod;
ll ret = ;
while(n) {
if(n&)
ret = (ret+a)%mod;
a = (a+a)%mod;
n >>= ;
}
return ret;
}
ll CRT(ll a[],ll m[],int n)
{
ll M = ;
ll ans = ;
for(int i=; i<=n; i++)
M *= m[i];
for(int i=; i<=n; i++)
{
ll x, y;
ll Mi = M / m[i];
extend_Euclid(Mi, m[i], x, y);
ans = (ans + mul(mul(Mi, x, M), a[i], M))%M;
}
return (ans+M)%M;
}
ll pow(ll a, ll b, ll mod)
{
ll ret = ;
while(b) {
if(b&) ret = ret*a%mod;
a = a*a%mod;
b /= ;
}
return ret;
}
ll C(ll n, ll m, ll mod)
{
ll a = , b = ;
for(int i = ; i <= m; i++) {
b = b*i%mod;
a = a*(n-i+)%mod;
}
return a*pow(b, mod-, mod)%mod;
}
ll lucas(ll n, ll m, ll mod)
{
if(m == )
return ;
return lucas(n/mod, m/mod, mod)*C(n%mod, m%mod, mod)%mod;
}
int main()
{
ll t, n, m, k;
cin>>t;
while(t--) {
cin>>n>>m>>k;
for(int i = ; i <= k; i++) {
scanf("%lld", &a[i]);
}
for(int i = ; i <= k; i++) {
b[i] = lucas(n, m, a[i]);
}
ll ans = CRT(b, a, k);
cout<<ans<<endl;
}
return ;
}
hdu 5446 Unknown Treasure 中国剩余定理+lucas的更多相关文章
- 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 ...
- 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 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
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- 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 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定理+中国剩余定理
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- HDU 5446 Unknown Treasure(Lucas定理+CRT)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5446 [题目大意] 给出一个合数M的每一个质因子,同时给出n,m,求C(n,m)%M. [题解] ...
随机推荐
- 预载入和JavaScript Image()对象
预载入和JavaScript Image()对象 很多high-res图像真的可以使 Web 站点更加整洁.但是它们也会使站点的访问速度变慢——图像是文件,文件使用带宽,带宽直接与等待时间相关.是该了 ...
- Mysql自定义变量的使用
用户自定义变量是一个容易被遗忘的MySQL特性,但是如果能用的好,发挥其潜力,在某些场景可以写出非常高效的查询语句.在查询中混合使用过程化和关系化逻辑的时候,自定义变量可能会非常有用.单纯的关系查询将 ...
- NGINX+PHP+MYSQL服务器环境搭建
这条命令是配置vim的,请确保你能访问github wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh 说明有一些小问题, ...
- 中国大学MOOC-翁恺-C语言程序设计习题集
今年网易出了“中国大学MOOC”,于是选了浙大翁恺老师的“C语言程序设计”学习,近期打算把自己在该课程中的PAT习题解答做一个记录,等自己编程能力提高后再来看现在写的代码哪里还有写的不好,可以改进的地 ...
- Python中各种集合 list tuple set dict
list 创建list L = ['Adam','Lucy','Bart'] 索引访问: 正序(和数组类似) L[0],L[1],L[2] 倒序 L[-1]倒数第一个 L[- ...
- YY的困境:除了终止私有化 还有更多的担忧
界面 刘莎 已大热一段时间的中概股私有化浪潮随着中国股市的下跌而降温,很多在美上市的中概股不得不因此叫停私有化,欢聚时代(下称YY)首当其冲,成为私有化大军中首个被迫撤退的中资公司. 虽然从表面看,私 ...
- 关于GPS偏移的基础知识
转载地址 我们平时用到的地球坐标系统,叫做WGS84坐标,国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标, ...
- iframe 标签自适应高度和宽度
iframe 结构如下 <iframe src="index.html" id="frame" frameborder="0" scr ...
- hdu 4686 Arc of Dream(矩阵快速幂乘法)
Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai- ...
- hdu 5567 sequence1(水)
问题描述 给定长度为n的序列a,求有多少对i,j(i<j),使得∣ai−aj∣ mod b=c 输入描述 若干组数据(大概5组). 每组数据第一行三个整数n(≤n≤),b,c(≤c<b ...