首页 > 代码库 > 【BZOJ2982】combination Lucas定理
【BZOJ2982】combination Lucas定理
【BZOJ2982】combination
Description
LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样。那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ的一年有10007天,所以他想知道答案mod 10007的值。(1<=m<=n<=200,000,000)
Input
第一行一个整数t,表示有t组数据。(t<=200)
接下来t行每行两个整数n, m,如题意。
Output
T行,每行一个数,为C(n, m) mod 10007的答案。
Sample Input
4
5 1
5 2
7 3
4 2
5 1
5 2
7 3
4 2
Sample Output
5
10
35
6
10
35
6
题解:百度:lucas定理
#include <cstdio>#include <cstring>#include <iostream>#define mod 10007using namespace std;int n,jc[10010],jcc[10010];int pm(int x,int y){ int z=1; while(y) { if(y&1) z=z*x%mod; x=x*x%mod,y>>=1; } return z;}int dfs(int x,int y){ if(!y) return 1; if(x<y) return 0; if(x<mod&&y<mod) return jc[x]*jcc[y]%mod*jcc[x-y]%mod; return dfs(x/mod,y/mod)*dfs(x%mod,y%mod)%mod;}int main(){ scanf("%d",&n); int i,a,b; for(i=1,jc[0]=jcc[0]=1;i<=10007;i++) jc[i]=jc[i-1]*i%mod,jcc[i]=pm(jc[i],mod-2); for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); printf("%d\n",dfs(a,b)); } return 0;}
【BZOJ2982】combination Lucas定理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。