BZOJ 2982 combination
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 2982 combination相关的知识,希望对你有一定的参考价值。
Lucas定理模板题目
#include <iostream> #include <string.h> #include <cmath> #define ll long long using namespace std; const int maxn=10000007; ll n,m,p; ll fac[maxn]; void getfac(ll p)//预处理阶层 { fac[0]=1; for(int i=1;i<=p;i++) fac[i]=fac[i-1]*i%p; } ll power(ll a,ll n,ll p)//快速幂运算 { ll ans=1; while(n) { if(n&1) ans=ans*a%p; a=a*a%p; n/=2; } return ans; } ll lucas(ll n,ll m,ll p) { ll ans=1; while(n&&m) { ll a=n%p; ll b=m%p; if(a<b) return 0; ans=(ans*fac[a]*power(fac[b]*fac[a-b]%p,p-2,p))%p;// fac[b]*fac[a-b]后面别忘了%p,否则WA n/=p; m/=p; } return ans; } int main() { int t;cin>>t; getfac(10007); while(t--) { cin>>n>>m; cout<<lucas(n,m,10007)<<endl; } return 0; }
以上是关于BZOJ 2982 combination的主要内容,如果未能解决你的问题,请参考以下文章