求组合数-费马小定理


//快速幂
LL powermod(LL a,LL n)
{
    if(a==0) return 1;
    LL ret=1,res=a;
    while(n)
    {
        if(n&1) ret=ret*res%mod;
        res=res*res%mod;
        n>>=1;
    }
    return ret;
}
LL fun(LL n,LL m)
{
    if(n>m/2) n=m-n;
    LL  ans=1,i=1;
    while(i<=n)
    {
        ans=ans*(m-i+1)%mod*powermod(i,mod-2)%mod;
        i++;
    }
    return ans;
}
/*
//还可以优化
LL c[1000]={1};
    for(int i=1;i<=n;i++) c[i]=(n-i+1)*powermod(i,mod-2)%mod*c[i-1]%mod;
*/

费马小定理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

C(m,n)=m!/(n!*(m-n)!), C(m,n-1)=m!/((n-1)!*(m-n+1)),
所以C(m,n)=(m-n+1)/n*C(m,n-1).
由费马小定理两边除以a,所以1/a=a^(p-2)(mod p).

你可能感兴趣的:(数论)