BZOJ 2982 combination
阿新 • • 發佈:2017-09-08
cnblogs zoj max fine str urn 模板題 題目 bin
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