给定两个整数n
和k
,预计会找到nCk % MOD
,其中MOD
为1000000007
。我的计划如下:
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)
,其中i
从0
运行到k-1
。