def log_nCk(n, k): """log(choose(n,k)) with overflow protection.""" if n == 0 or k == 0 or n == k: return 0 return log(n) + lgamma(n) - log(k) - lgamma(k) - log(n-k) - lgamma(n-k)