hdu 3037 Saving Beans lucas定理
来源:互联网 发布:java this的作用 编辑:程序博客网 时间:2024/05/18 18:02
Description
Although winter is far away, squirrels have to work day and night to save beans. They need plenty of food to get through those long cold days. After some time the squirrel family thinks that they have to solve a problem. They suppose that they will save beans in n different trees. However, since the food is not sufficient nowadays, they will get no more than m beans. They want to know that how many ways there are to save no more than m beans (they are the same) in n trees. Now they turn to you for help, you should give them the answer. The result may be extremely huge; you should output the result modulo p, because squirrels can’t recognize large numbers.Input
The first line contains one integer T, means the number of cases. Then followed T lines, each line contains three integers n, m, p, means that squirrels will save no more than m same beans in n different trees, 1 <= n, m <= 1000000000, 1 < p < 100000 and p is guaranteed to be a prime.Output
You should output the answer modulo p.Sample Input
21 2 52 1 5Sample Output
33
Hint
HintFor sample 1, squirrels will put no more than 2 beans in one tree. Since trees are different, we can label them as 1, 2 … and so on. The 3 ways are: put no beans, put 1 bean in tree 1 and put 2 beans in tree 1. For sample 2, the 3 ways are: put no beans, put 1 bean in tree 1 and put 1 bean in tree 2.
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cctype>#include <sstream>#include <cmath>using namespace std;const int inf =0x3f3f3f3f;typedef long long LL;const int N = 100005;LL fact[N];LL Fact(LL p){ fact[0]=1; for(int i=1;i<=p;i++) { fact[i]=(fact[i-1]*i)%p; }}LL quickpow(LL a, LL b, LL Mod){ LL ret = 1; while(b) { if(b&1) ret = (ret * a)% Mod; a= (a*a)%Mod; b>>=1; } return ret;}LL lucas(LL n, LL m, LL p){ LL ret = 1; while(n&&m) { LL a = n%p, b=m%p; if(a<b) return 0; ret = (ret*fact[a]*quickpow(fact[b]*fact[a-b]%p, p-2,p))%p; n/=p; m/=p; } return ret;}int main(){ int t; LL m, n, p, ans; scanf("%d", &t); while(t--) { scanf("%lld %lld %lld", &n, &m, &p); Fact(p); ans = lucas(n+m, m, p); printf("%lld\n", ans); } return 0;}
0 0
- hdu 3037 Saving Beans(Lucas定理)
- HDU 3037 Saving Beans (Lucas定理)
- HDU 3037 Saving Beans(lucas定理)
- HDU 3037 Saving Beans (Lucas定理)
- [Lucas定理] hdu 3037 Saving Beans
- hdu 3037 saving beans (lucas定理)
- HDU 3037 Saving Beans (Lucas定理)
- hdu 3037 Saving Beans lucas定理
- HDU 3037:Saving Beans(Lucas定理)
- HDU 3037 Saving Beans Lucas定理
- hdu 3037 Saving Beans Lucas定理
- hdu 3037 Saving Beans(lucas定理)(卢卡斯定理)
- hdu 3037 Saving Beans 【大组合数取模-Lucas定理+逆元取模】
- 大组合数取模 hdu 3037 Saving Beans lucas定理
- hdu 3037 Saving Beans( lucas定理+隔板法 )
- [ACM] hdu 3037 Saving Beans (Lucas定理,组合数取模)
- HDU 3037 Saving Beans 大组合数 lucas定理
- HDU 3037 Saving Beans(Lucas定理的直接应用)
- 百度地位获取详细地址
- 编程方法思想
- 解决RecyclerView上拉加载、下拉刷新、Header和Footer的第三方解决方案
- shell中的${},##和%%的使用
- openstack多region配置-单keystone
- hdu 3037 Saving Beans lucas定理
- 实现自定义sleep
- 实时猫webrtc
- Java四种线程池的使用详解
- cache与buffer的区别联系
- PCB低功耗基础理解以及设计
- utf-8和utf8的区别
- storyBoard 通过其进行界面跳转的封装类
- 生产环境页面504问题--host地址配错问题