/* k and n - k gives the same value, optimize the calculation to do fewer
steps*/
if(k*2>n)k=n-k;
if(k==0)return1;
UnsignedLongresult=n;
for(UnsignedInti=2;i<=k;++i){
CORRADE_ASSERT(result<~UnsignedLong{}/(n-i+1),"Math::binomialCoefficient(): overflow for ("<<Corrade::Utility::Debug::nospace<<n<<"choose"<<k<<Corrade::Utility::Debug::nospace<<")",0ul);
result*=(n-i+1);
for(UnsignedInti=2;i<=k;++i){
CORRADE_ASSERT(result<~UnsignedLong{}/(n-i+1),"Math::binomialCoefficient(): overflow for ("<<Corrade::Utility::Debug::nospace<<n<<"choose"<<k<<Corrade::Utility::Debug::nospace<<")",{});