FZUoj 2020 组合 (组合数学&&Lucas定理)
来源:互联网 发布:js中a标签的href路径 编辑:程序博客网 时间:2024/05/16 13:04
Problem 2020 组合
Accept: 819 Submit: 1951
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<stdio.h>#include<string.h>#include<algorithm>#define ll long longusing namespace std;int n,m,p;ll ksm(ll x,ll y)//快速幂 {ll ans=1;while(y){if(y&1)ans=(ans*x)%p;x*=x;x%=p;y>>=1;}return ans%p;}ll C(int n,int m){int i;ll sum1=1,sum2=1;for(i=1;i<=m;i++){sum1=(sum1*(n-i+1))%p;sum2=(sum2*i)%p;}sum1=(sum1*ksm(sum2,p-2))%p;return sum1;}void solve(int n,int m)//Lucas定理 {ll ans=1;while(n&&m&&ans){ans=(ans*C(n%p,m%p))%p;n/=p;m/=p;}printf("%lld\n",ans);}int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&p);solve(n,m);}return 0;}
0 0
- FZUoj 2020 组合 (组合数学&&Lucas定理)
- [HDU3944]DP? (组合数学Lucas定理)
- [BZOJ2982]combination(组合数学lucas定理)
- [bzoj2982]combination(组合数学lucas定理)
- FZU 2020 组合(Lucas定理)
- FZU 2020 组合(Lucas定理)
- Lucas定理+乘法逆元+组合数学(hdu5226)
- nefuoj Garden visiting 628 (组合数学&&Lucas定理)
- HDU5894-hannnnah_j’s Biological Test(组合数学+Lucas定理)
- [HDU3037]Saving Beans(组合数学Lucas定理)
- [ZOJ3557]How Many Sets II(组合数学Lucas定理)
- [HDU4349]Xiao Ming's Hope(组合数学Lucas定理)
- [BZOJ2111][ZJOI2010]Perm 排列计数(组合数学+lucas定理)
- [ZOJ3557]How Many Sets II(组合数学Lucas定理)
- 4403: 序列统计 组合数学+Lucas定理
- 组合数学lucas定理 BZOJ2982 combination
- BZOJ 2982 浅谈组合数学Lucas定理
- FZU 2020 组合 lucas定理
- 在session过期后如何跳转到登录页面
- splay 模板
- 支付参考文档
- 跨域WebService请求 ——Nginx+SOAP服务+Ajax客户端
- hdu2669 扩展欧几里得
- FZUoj 2020 组合 (组合数学&&Lucas定理)
- CentOS 上php环境搭建
- 蓝桥杯 算法训练 出现次数最多的整数
- 排序算法应用
- c语言指针-简要
- getattr
- Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见
- JavaScript- 图表库Highcharts
- Prim算法 Kruskal算法 Dijstra算法 Floyed算法