标签:efi logs 快速幂运算 using 否则 space oid class a*
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; }
标签:efi logs 快速幂运算 using 否则 space oid class a*
原文地址:http://www.cnblogs.com/OIerLYF/p/7496031.html