Problem 2020 组合

Accept: 886    Submit: 2084
Time Limit: 1000 mSec    Memory Limit : 32768
KB

Problem Description

给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是xiaobo希望你输出 C(n,m) mod p的值!

Input

输入数据第一行是一个正整数T,表示数据组数 (T <= 100) 接下来是T组数据,每组数据有3个正整数 n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数)

Output

对于每组数据,输出一个正整数,表示C(n,m) mod p的结果。

Sample Input

2 5 2 3 5 2 61

Sample Output

1 10 
未预处理阶乘(在组合数函数中写了个循环):
 #include<iostream>
using namespace std;
#include<cstdio>
#define ll long long
int t;
ll quick_mod(ll a,ll b,ll p)// a^b%p
{
a%=p;
ll ans=;
while(b)
{
if(b&)
{
b--;
ans=(ans*a)%p;
}
b>>=;
a=(a*a)%p;
}
return ans;
}
ll C(ll n, ll m,ll p)
{
if(m>n) return ;
ll ans=,a,b;
for(int i=;i<=m;++i)
{
a=(n+i-m)%p;
b=i%p;
ans=ans*(a*quick_mod(b,p-,p)%p)%p;
}
return ans;
}
ll lucas(ll n,ll m,ll p)
{
if(m==) return ;
return (lucas(n/p,m/p,p)*C(n%p,m%p,p))%p;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ll n,m,p;
cin>>n>>m>>p;
cout<<lucas(n,m,p)<<endl;
}
return ;
}

预处理阶乘(有时可以加快速度,相乘时也要防止溢出):

 /*事实上,这道题目预处理阶乘,反而会更慢,因为题目中n,m都是10^9,预处理已经接近超时了*/
#include<iostream>
using namespace std;
#include<cstdio>
#define S 10000000
#define ll long long
int t;
long long f[];
void yuchuli(ll p)
{
f[]=;
for(int i=;i<=S;++i)
f[i]=f[i-]*i%p;
}
ll quick_mod(ll a,ll b,ll p)
{
a%=p;
ll ans=;
while(b)
{
if(b&)
{
b--;
ans=(ans*a)%p;
}
b>>=;
a=(a*a)%p;
}
return ans;
}
ll C(ll n, ll m,ll p)
{
if(m>n) return ;
return (f[n]*quick(f[m]*f[n-m],p-,p))%p;
}
ll lucas(ll n,ll m,ll p)
{
if(m==) return ;
return (lucas(n/p,m/p,p)*C(n%p,m%p,p))%p;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ll n,m,p;
cin>>n>>m>>p;
cout<<lucas(n,m,p)<<endl;
}
return ;
}
 

lucas定理 FOJ 2020 组合的更多相关文章

  1. 『Lucas定理以及拓展Lucas』

    Lucas定理 在『组合数学基础』中,我们已经提出了\(Lucas\)定理,并给出了\(Lucas\)定理的证明,本文仅将简单回顾,并给出代码. \(Lucas\)定理:当\(p\)为质数时,\(C_ ...

  2. FZU 2020 组合 (Lucas定理)

    题意:中文题. 析:直接运用Lucas定理即可.但是FZU好奇怪啊,我开个常数都CE,弄的工CE了十几次,在vj上还不显示. 代码如下: #pragma comment(linker, "/ ...

  3. Problem 2020 组合(FOJ)

    Problem 2020 组合 Accept: 714    Submit: 1724Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem ...

  4. Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 178  Solved: 70[Submit][Stat ...

  5. 快速求排列组合 lucas定理

    对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况. 就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 一般lucas定理的p ...

  6. 【BZOJ4591】超能粒子炮·改(Lucas定理,组合计数)

    题意: 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...

  7. 【BZOJ4403】序列统计(Lucas定理,组合计数)

    题意:给定三个正整数N.L和R, 统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量. 输出答案对10^6+3取模的结果. 对于100%的数据,1≤N,L,R≤10^9,1≤T≤100, ...

  8. [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  9. CPC23-4-K. 喵喵的神数 (数论 Lucas定理)

    喵喵的神∙数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比較感兴趣,而且对计算组合数很在行. 同一时候为了追求有后宫的素养的生活 ...

随机推荐

  1. C - A New Function (整除分块 + 玄学优化)

    题目链接:https://cn.vjudge.net/contest/270608#problem/C 题目大意:给你一个n,让你求从1->n中间每个数的因子之和(每个数在求因子的过程中不包括本 ...

  2. Python3 多进程

    多进程(multiprocessing)的用法和多线程(threading)类似,里面的函数也一样,start()为启动函数,join() 等待该进程运行结束,每一个进程也是由它的父进程产生 1.简单 ...

  3. python进阶之内置函数和语法糖触发魔法方法

    前言 前面已经总结了关键字.运算符与魔法方法的对应关系,下面总结python内置函数对应的魔法方法. 魔法方法 数学计算 abs(args):返回绝对值,调用__abs__; round(args): ...

  4. ECNA 2017

    ECNA 2017 Abstract Art 题目描述:求\(n\)个多边形的面积并. solution 据说有模板. Craters 题目描述:给定\(n\)个圆,求凸包的周长. solution ...

  5. linux动态库编译和使用详细剖析 - 后续

    引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...

  6. VMW虚拟机生成的文件说明

    VMDK(VMWare Virtual Machine Disk Format)是虚拟机VMware创建的虚拟硬格式,文件存在于VMware文件系统中,被称为VMFS(虚拟机文件系统) NVRAM 非 ...

  7. /boot/grub/grub.conf 内容诠释

    linux的启动配置文件GRUB启动时会在 /boot/grub 中寻找一个名字为grub.conf的配置文件,如果找不到此配置文件则不进入菜单模式而直接进入命令行模式. grub.conf是一个纯文 ...

  8. JMeter -----设置代理抓取web的HTTPS请求,“您的连接不是私密链接”的处理方案

    出现如上截图的问题,已确定将网站的证书.jmeter的证书均安装完成,并未提示报错,但是在配置代理后,刷新网站抓取请求时总是提示如上报错 解决方案: 1.关闭电脑上的所有浏览器 2.打开“终端”运行: ...

  9. mongodb卸载再重装

    标题就凸显了尴尬,是的,本地(ubuntu16.04)自带的mongodb太老了,想要装最新版的 卸载: sudo dpkg -P mongodb 然后下载新版的mongodb:  https://m ...

  10. 【LOJ】 #2011. 「SCOI2015」情报传递

    题解 一写过一交A的一道数据结构水题 我们发现大于C可以转化为这条路径上有多少个在某天之前开始调查的情报员,离线全部读入,变成树上路径查询某个区间的数出现过多少次,构建一棵根缀的主席树,查询的时候用两 ...