1. 程式人生 > >BZOJ 2982 combination

BZOJ 2982 combination

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