Lucas定理(大组合数取模)

来源:互联网 发布:什么软件重装系统最好 编辑:程序博客网 时间:2024/05/16 06:07
#include<bits/stdc++.h>using namespace std;typedef long long ll;ll f[10008];const int p=10007;void init(){f[0]=1;for(int i=1;i<=10007;i++)f[i]=(f[i-1]*i)%p;}ll pow(ll a,int b){ll ans=1;while(b){if(b&1)ans=ans*a%p;a=a*a%p;b>>=1;}return ans;}ll C(ll a,int b){if(b>a)return 0;return f[a]*(pow(f[b]*f[a-b],p-2))%p;}ll lucas(ll n,ll m){if(m==0)return 1;else return (C(n%p,m%p)*lucas(n/p,m/p))%p;}int main(){ll n,m;while(~scanf("%lld %lld",&n,&m))   {init();printf("%lld\n",lucas(m,n));   }}

0 0
原创粉丝点击