您的位置:首页 > 其它

求C(n,m)%mod

2016-07-11 15:38 253 查看
long long pow_mod(int a,int n)
{
long long ans=1;
while(n)
{
if(n&1) ans=ans*a%mod;
a=a*a%mod;
n>>=1;
}
return ans;
}
long long C(int k,int n)
{
long long sum=1;
for(int i=1,j=n;i<=k;i++,j--)
sum=sum*j*pow_mod(i,mod-2)%mod;
return sum;
}


O(1)

void init()
{
dp[1]=1;
for(long long i=2;i<=1000000;i++)
dp[i]=dp[i-1]*i%mod;
}
long long pow_mod(long long a,long long n)
{
long long ans=1;
while(n)
{
if(n&1) ans=ans*a%mod;
a=a*a%mod;
n>>=1;
}
return ans;
}
long long C(long long a,long long b)
{
if(!b) return 1;
long long ans=dp[a];
ans=ans*pow_mod(dp[a-b],mod-2)%mod;
ans=ans*pow_mod(dp[b],mod-2)%mod;
return ans;
}

Lucas

long long pow_mod(long long a,long long n)
{
long long ans=1;
while(n)
{
if(n&1) ans=ans*a%p;
a=a*a%p;
n>>=1;
}
return ans;
}
long long C(LL n, LL m)
{
if(m > n) return 0;
LL ans = 1;
for(int i=1; i<=m; i++)
{
LL a = (n + i - m) % p;
LL b = i % p;
ans = ans * (a * pow_mod(b, p-2) % p) % p;
}
return ans;
}
LL Lucas(LL n, LL m)///C(n,m)
{
if(m == 0) return 1;
return C(n % p, m % p) * Lucas(n / p, m / p) % p;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: