C++ 对数公式求组合数
时间: 2024-02-06 20:59:06 浏览: 71
组合数公式为:
$C_n^m = \dfrac{n!}{m!(n-m)!}$
其中,$n$ 表示集合中元素的总数,$m$ 表示要选出的元素个数。
我们可以利用对数公式将组合数公式简化:
$\log C_n^m = \log\dfrac{n!}{m!(n-m)!}$
$\log C_n^m = \log n! - \log m! - \log(n-m)!$
$\log C_n^m = \sum\limits_{i=1}^n \log i - \sum\limits_{i=1}^m \log i - \sum\limits_{i=1}^{n-m} \log i$
$\log C_n^m = \sum\limits_{i=m+1}^n \log i - \sum\limits_{i=1}^{n-m} \log i$
$\log C_n^m = \sum\limits_{i=1}^{n-m} \log\dfrac{n-i+1}{i} = \sum\limits_{i=1}^{m} \log\dfrac{n-i+1}{i}$
因此,可以利用对数公式求解组合数,这样可以避免大数的阶乘运算,减少计算量和时间复杂度。
阅读全文