如果使用模块化反转给出n和k,则查找nCk

时间:2016-11-03 13:17:03

标签: c++ modulo

给定两个整数nk,预计会找到nCk % MOD,其中MOD1000000007。我的计划如下:

long long int MOD = 1000000007;

long long int fast_pow(long long int base, long long int n,long long int M)
{
    if(n==0)
       return 1;
    if(n==1)
    return base;
    long long int halfn=fast_pow(base,n/2,M);
    if(n%2==0)
        return ( (halfn%M) * (halfn%M) ) % M;
    else
        return ( ( ( (halfn%M) * (halfn%M) ) % M ) * (base%M) ) % M;
}
long long int findMMI_fermat(long long int n,long long int M)
{
    return fast_pow(n,M-2,M);
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long int n,k;
        cin>>n>>k;
        k=min(k,n-k);
        long long int ans = 1;
        for(long long int i=0;i<k;++i)
            ans=(((ans*(n-i))%MOD)*findMMI_fermat(i+1,MOD))%MOD;// findMMI_fermat is to find the modular inverse
        cout<<(ans)%MOD<<endl;
    }
    return 0;
}

但在线法官表示解决方案是错误的。任何人都可以建议代码可能出错的地方?
注意:我的逻辑是运行循环ans*=(n-i)/(i+1),其中i0运行到k-1

0 个答案:

没有答案