如果以组合数的变化公式C(x,y)=y!/x!/(y-x)!这样写,在数据范围大于15左右就会爆掉long
long,所以需要处理一下组合数公式的组合方式:
C(x,y)=x/1*(x-1)/2*…*(x-y+1)/y这样可以让组合数乘的时候小一点(原理:x逐渐递减而且有序,而且符合奇偶交替,y从1逐渐递增且有序,也符合奇偶交替,所以可以这样实现)
代码实现:
long long C(ll m,ll n)
{
ll sum=1,ans=1;
for(ll i=m-n; m>i; m--)
{
if(ans>n);
sum=sum*m/ans;
ans++;
}
return sum;
}